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

Σχετικά έγγραφα
Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων

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

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

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

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

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

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

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

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

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

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

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

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

Διαγράμματα UML στην Ανάλυση. Μέρος Β Διαγράμματα Κλάσεων Διαγράμματα Αντικειμένων

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

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

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

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

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

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

UML: Unified modelling language

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

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

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

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

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

Η κατασκευή αντικειμένων της κλάσης Student μπορεί να πραγματοποιηθεί είτε στη main είτε σε οποιαδήποτε μέθοδο κλάσης:

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2ο. Κατανοώντας την αντικειμενοστρέφεια

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

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

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

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

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

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

09 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Τμήμα Πληροφορικής & Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Εαρινό εξάμηνο

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

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

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

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

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

Μοντελοποίηση Συστημάτων. Διαγράμματα Κλάσεων ClassDiagrams

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

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

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

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος)

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

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

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

Εισαγωγή στη γλώσσα UML

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

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

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

ΟΔΗΓΙΕΣ ΓΙΑ ΧΡΗΣΗ ΤΟΥ ΕΡΓΑΛΕΙΟΥ RATIONAL ROSE

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 18/3/2008

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

Διαγράμματα UML για την τεκμηρίωση της Αρχιτεκτονικής

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

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

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

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

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Τεχνολογία Λογισμικού 06/11/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Class Diagrams Διαγράμματα Κλάσεων 1

Διαγράμματα UML Διάγραμμα περιπτώσεων χρήσης (use case diagram) Διάγραμμα κλάσεων (class diagram) Διάγραμμα αντικειμένων (object diagram) Διάγραμμα καταστάσεων (state diagram) Διάγραμμα δραστηριοτήτων (activity diagram) Διαγράμματα αλληλεπίδρασης (interaction diagrams) Διάγραμμα ακολουθίας (sequence diagram) Διάγραμμα επικοινωνίας (communication diagram) Διαγράμματα υλοποίησης (physical diagrams) Διάγραμμα συστατικών (component diagram) Διάγραμμα ανάπτυξης (deployment diagram) Άξονες Μοντελοποίησης Λειτουργικότητα functionality Τι κάνει το σύστημα; Ποιες λειτουργίες υποστηρίζει; Ανάλυση απαιτήσεων Περιγραφές από κείμενο Στατικά διαγράμματα Πώς είναι οργανωμένα τα συστατικά του τμήματα; Δυναμική συμπεριφορά Πώς ανταποκρίνεται και από ποιες καταστάσεις περνάει; Δομή structure Συμπεριφορά behaviour 2

Κλάση συσχέτισης (Association Class) Όταν τα γνωρίσματα ή οι λειτουργίες δεν εμφανίζονται σε μία μεμονωμένη κλάση αλλά στη συσχέτιση μεταξύ δύο κλάσεων Τότε κλάση συσχέτισης! Θέλουμε να διατηρήσουμε πληροφορία που είναι συγκεκριμένη για αυτή τη συσχέτιση, αλλά όχι για κάθε μία από τις κλάσεις που συμμετέχουν Class A Class B Class Y Κλάση συσχέτισης (Association Class) -name -age Person * employment 0..1 Company -name Συσχέτιση Λεπτομέρειες πρόσληψης ενός υπαλλήλου που εργάζεται σε μία εταιρία Person Company -name -age * employment 0..1 -name Κλάση συσχέτισης Employment -salary -startdate -end Date Κλάση συσχέτισης: μπορεί να υπάρχει το πολύ ένα στιγμιότυπο της κλάσης συσχέτισης μεταξύ οποιουδήποτε ζεύγους συσχετισμένων αντικειμένων 3

Κλάση συσχέτισης (Association Class) Student -name -student# 0..* 1..* Course -name Κλάση συσχέτισης Enrollment -enrollmentdate Enroll Drop Cancel Κλάση συσχέτισης: μπορεί να υπάρχει το πολύ ένα στιγμιότυπο της κλάσης συσχέτισης μεταξύ οποιουδήποτε ζεύγους συσχετισμένων αντικειμένων ανεξάρτητα από πολλαπλότητες και στα δύο άκρα Προάγοντας την κλάση συσχέτισης σε κανονική κλάση -name -age Person * employment 0..1 Company -name Employment -salary -startdate -end Date Υλοποίηση κλάσης συσχέτισης σε γλώσσες προγραμματισμού /employer * 0..1 Employment Person Company -salary -name 1 0..1 * 1 -startdate -name -age -end Date 4

Προάγοντας την κλάση συσχέτισης σε κανονική κλάση -name -age Person Ισοδύναμα??? * employment 0..1 Employment -salary -startdate -end Date Company -name ΟΧΙ!!!!!! Αυτό το διάγραμμα δεν μπορεί να αναπαραστήσει την περίπτωση ενός ατόμου που έχει εργαστεί για την ίδια εταιρία σε διαφορετικές περιόδους /employer * 0..1 Employment Person Company -salary -name 1 0..1 * 1 -startdate -name -age -end Date Αυτό μπορεί! Κλάση συσχέτισης Περιορισμός κλάσεων συσχέτισης Person * knows * Programming Language Level Person 2..* attends * Meeting Role 5

Κλάση συσχέτισης Man preacher 1 my husband my wife 1 1 Woman Marriage performed services date 1..* place Μονογαμικός γάμος ως κλάση συσχέτισης Η κλάση συσχέτισης είναι πλήρης κλάση Μπορεί να έχει λειτουργίες, ιδιότητες, συσχετίσεις Παράδειγμα η κλάση «Marriage» μπορεί να έχει μία συσχέτιση με την εκκλησία όπου έγινε η τελετή, ή με το άτομο που τέλεσε την τελετή Κλάση συσχέτισης Man preacher 1 my husband my wife 1..* 1 Woman Marriage performed services date 1..* place Πολυγαμικός γάμος ως κλάση συσχέτισης Τότε θέλουμε περισσότερα στιγμιότυπα της κλάσης συσχέτισης, τόσα όσες οι συσχετίσεις! Δεν μπορούμε να έχουμε 2 στιγμιότυπα του Marriage που να συσχετίζουν ακριβώς τα ίδια αντικείμενα! 6

Κλάση συσχέτισης Man preacher 1 my husbands my wife 1..* 1 Woman Marriage performed services date 1..* place Πολυγαμικός γάμος ως κλάση συσχέτισης John: Man one: Marriage Mary: Woman Bob: Man two: Marriage Παράδειγμα με συσχετίσεις σε Java Department -teachers 1..* Teacher -president 1 Έχουμε μία κλάση «Teacher», η οποία αφορά έναν εκπαιδευτικό Κάθε εκπαιδευτικός έχει ένα όνομα που είναι αλφαριθμητικό (String) Επειδή ο εκπαιδευτικός δεν έχει την υποχρέωση να γνωρίζει το τμήμα στο οποίο ανήκει μια και δεν υπάρχει πλοηγησιμότητα από την κλάση «Teacher» προς την κλάση «Department», η κλάση «Teacher» δεν αναφέρεται καθόλου στην κλάση «Department». 7

Παράδειγμα με συσχετίσεις σε Java Η κλάση «Teacher» διαθέτει τις μεθόδους: equals, που χρησιμοποιείται για τον έλεγχο ισότητας μεταξύ δύο εκπαιδευτικών και επιστρέφει true αν τα ονόματά τους είναι ίδια hashcode, που επιστρέφει τον κωδικό κατακερματισμού (hash code) του εκπαιδευτικού getname που επιστρέφει το όνομα του εκπαιδευτικού Οι μέθοδοι equals και hashcode αποτελούν υπερβάσεις των αντίστοιχων μεθόδων της υπερκλάσης «Object» που επεκτείνουν όλες οι κλάσεις της Java και παρέχονται εδώ για να μπορούν τα αντικείμενα της κλάσης «Teacher» να περιέχονται σε συλλογές (π.χ. σε Set). Αυτό θα χρειαστεί στην κλάση «Department» Παράδειγμα με συσχετίσεις σε Java Κώδικας της κλάσης «Teacher» public class Teacher { private String name; // Κατασκευαστής: θέτει το όνομα στην τιμή της παραμέτρου name public Teacher(String name) { this.name = name; } // Μέθοδος επιστροφής του ονόματος του εκπαιδευτικού public String getname() { return name; } // Δύο εκπαιδευτικοί αν έχουν το ίδιο όνομα public boolean equals(object o) { Teacher t = (Teacher) o; return t.name == this.name; } // 0 κωδικός κατακερματισμού (hash code) των εκπαιδευτικών είναι ίσος με τον κωδικο κατακερματισμού του ονόματός τους public int hashcode() { return name.hashcode(); } 8

Παράδειγμα με συσχετίσεις σε Java Η κλάση «Department» έχει: ένα όνομα τμήματος που είναι απλή ιδιότητα δύο συσχετίσεις με την κλάση «Teacher»: Η πρώτη αφορά τον πρόεδρο του τμήματος (president) Η δεύτερη αφορά τους εκπαιδευτικούς του τμήματος (teachers) Η υποχρέωση να γνωρίζει η κλάση «Department» τους εκπαιδευτικούς μας αναγκάζει να προσθέσουμε κατάλληλες μεθόδους έτσι ώστε να είναι δυνατή η: Προσθήκη εκπαιδευτικού (μέθοδος addteacher) Διαγραφή εκπαιδευτικού (μέθοδος removeteacher) Εύρεση εκπαιδευτικού (findteacher) Παράδειγμα με συσχετίσεις σε Java Η υποχρέωση να γνωρίζει η κλάση «Department» τον εκπαιδευτικό που είναι πρόεδρος του τμήματος μας υποχρεώνει να δηλώσουμε τις κατάλληλες μεθόδους: Προσθήκη προέδρου (μέθοδος setpresident) Ανάκτηση προέδρου (μέθοδος getpresident) Για να επιβεβαιώσουμε την ορθή λειτουργία των μεθόδων αυτών, έχουμε βάλει μία μέθοδο εμφάνισης των εκπαιδευτικών (μέθοδος printteachers) και μία κύρια μέθοδο {main) 9

Παράδειγμα με συσχετίσεις σε Java Παρατηρήστε ότι για τον πρόεδρο (president) χρησιμοποιείται μία απλή μεταβλητή τύπου Teacher Για τους εκπαιδευτικούς (teachers) χρησιμοποιείται μία συλλογή (πιο συγκεκριμένα ένα Set) επειδή είναι πολλοί (πολλαπλότητα * ) Ο λόγος χρήσης ενός Set και όχι κάποιας άλλης συλλογής (π.χ. List) είναι ότι δεν μας ενδιαφέρει η διάταξη των αντικειμένων και δεν θέλουμε διπλές εμφανίσεις εκπαιδευτικών Το δεύτερο διασφαλίζεται με τη χρήση της κλάσης «Set», μια και η μέθοδος add σε ένα set επιστρέφει false αν η μέθοδος equals του αντικειμένου που εισάγεται επιστρέφει true για οποιοδήποτε αντικείμενο είναι ήδη στο σύνολο: δηλαδή, αν το αντικείμενο υπάρχει ήδη στο σύνολο. Αυτός είναι και ο λόγος που δηλώσαμε στην κλάση «Teacher» τη μέθοδο equals Παράδειγμα με συσχετίσεις σε Java Κώδικας της κλάσης «Department» import java.util.hashset; import java.util.iterator; import Java.util.Set; public class Department { private Teacher president; // Ο πρόεδρος του τμήματος private Set<Teacher> teachers; // Σύνολο από αντικείμενα Teacher private String name; // To όνομα του τμήματος // Κατασκευαστής public Department(String name) { this.name = name; this.teachers = new HashSet<Teacher>(); } 10

Παράδειγμα με συσχετίσεις σε Java Κώδικας της κλάσης «Department» // Μέθοδος προσθήκης νέου εκπαιδευτικού public boolean addteacher(teacher t) { return teachers.add(t); } // Μέθοδος διαγραφής εκπαιδευτικού public boolean removeteacher(teacher t) { return teachers.remove{t}; } // Μέθοδος εύρεσης εκπαιδευτικού public boolean findteacher(teacher t) { return teachers.contains (t); } // Μέθοδος που oρίζει τον πρόεδρο του τμήματος public void setpresident {Teacher t) { this.president = t; } Παράδειγμα με συσχετίσεις σε Java Κώδικας της κλάσης «Department» // Μέθοδος που επιστρέφει τον πρόεδρο του τμήματος public Teacher getpresident() { return president; } // Μέθοδος εμφάνισης εκπαιδευτικών public void printteachers() { Iterator<Teacher> iterator = teachers.iterator(); while fiterator.hasnext()) { Teacher t = iterator.next(); System.out.printIn(t.getName()) } } 11

Παράδειγμα με συσχετίσεις σε Java Κώδικας της κλάσης «Department» // Κύρια μέθοδος public static void main(string args[]) { Teacher george = new Teacher( Γιώργος Γεωργίου ); Teacher george1 = new Teacher("Γιώργος Γεωργίου ); Department dept = new Department("Τμήμα DDS"); dept.addteacher(george); // Αυτή η εισαγωγή θα αποτύχει // γιατί ο εκπαιδευτικός ανήκει ήδη στο set teachers boolean ok = dept.addteacher(george1); if (!ok) { System.out.println("Η εισαγωγή απέτυχε"); } // Δοκιμή αν το set δουλεύει σωστά System.out.println("Εκπαιδευτικoί:"); dept.printteachers(); // Ανάθεση και ανάκτηση του προέδρου dept.setpresident(george); System.out.println("Πρόεδρος: + dept.getpresident().getname( ) ) ; }} Παραγόμενες συσχετίσεις & ιδιότητες (derived associations & properties) Μπορούν να υπολογιστούν από άλλες Συσχετίσεις / Ιδιότητες Π.χ. υπολογίζουμε το Person.age από το Person.birthDate Συμβολισμός: βάζουμε το / πριν το όνομά τους προοπτική προδιαγραφής (specification) Τα παραγόμενα χαρακτηριστικά (derived features) υποδηλώνουν περιορισμούς μεταξύ των τιμών. Δεν καθορίζουν με ακρίβεια τι αποθηκεύεται και τι υπολογίζεται. Απλά λένε στον προγραμματιστή να σεβαστεί αυτόν τον περιορισμό. προοπτική υλοποίησης (implementation) Συχνά υλοποιούνται για λόγους ταχύτητας (π.χ. για αποφυγή επαναϋπολογισμού) 12

Παραγόμενες συσχετίσεις & ιδιότητες (derived associations & properties) TimePeriod -start : Date -end : Date -/duration : Quantity /employer Derived association * 0..1 Derived property -name -age Person Employment 1 0..1 -salary -startdate * 1 -end Date Company -name Παγωμένο (frozen) Περιορισμός που χαρακτηρίζει μία ιδιότητα (property) ή ένα άκρο συσχέτισης (association end) - Συμβολισμός: {frozen} Σε αυτήν την περίπτωση η τιμή (της ιδιότητας/άκρου συσχέτισης) δεν αλλάζει κατά τη διάρκεια ύπαρξης του σχετικού αντικειμένου Η αρχική του τιμή (ακόμα και null) διατηρείται Συνήθως οι τιμές αυτές ορίζονται από τους κατασκευαστές των κλάσεων Αν ο περιορισμός εφαρμοστεί σε κλάση τότε: Όλα τα γνωρίσματα και άκρα συσχέτισης που σχετίζονται με αυτήν την κλάση παγιώνονται Frozen Read Only Π.χ. Ένα γνώρισμα age (που είναι παραγόμενο) μπορεί να είναι read-only αλλά όχι frozen 13

Αφαιρετικές (αφηρημένες) κλάσεις Παρέχουν κώδικα για κάποιες λειτουργίες ΑΛΛΑ αφήνουν άλλες λειτουργίες χωρίς κώδικα υλοποίησης (''αφαιρετικές ") Οι υποκλάσεις προσδιορίζουν τις χωρίς υλοποίηση λειτουργίες Συγκεκριμένες (concrete) υποκλάσεις Οι συγκεκριμένες υποκλάσεις: κληρονομούν τα συγκεκριμένα και αφαιρετικά στοιχεία των υπερκλάσεών τους και ταυτόχρονα συγκεκριμενοποιούν παρέχοντας την κατάλληλη υλοποίηση τα αφαιρετικά στοιχεία Αφαιρετική κλάση με συγκεκριμένη υποκλάση -linecolor : Color +draw() Shape -upperleft : Point -height : double -width : double +draw() Square Το όνομα της αφαιρετικής κλάσης και οι αφαιρετικές λειτουργίες γράφονται με πλάγια γράμματα Αφαιρετική κλάση για ένα «Shape» (σχήμα) Αφαιρετική λειτουργία draw() για τη σχεδίαση του σχήματος Η συγκεκριμένη υποκλάση για ένα τετράγωνο (η κλάση «Square») κληρονομεί τα συγκεκριμένα μέρη της κλάσης «Shape» και υλοποιεί τα αφαιρετικά στοιχεία (τη λειτουργία draw). 14

Αφαιρετικές κλάσεις και Διασύνδεση (interface) Παρέχει ένα σύνολο λειτουργιών οι οποίες είναι στο σύνολο τους αφαιρετικές Μια διασύνδεση δεν έχει δεδομένα, κατάσταση, αλλά ούτε συσχετίσεις με πλοηγισιμότητα από τη διασύνδεση προς το άλλο άκρο της συσχέτισης ΑΥΤΟ αποτελεί συνέπεια της έλλειψης δεδομένων η πλοηγησιμότητα συνεπάγεται την υποχρέωση της γνώσης των αντικειμένων της συσχετιζόμενης κλάσης και άρα ύπαρξη δεδομένων. Αφαιρετικές κλάσεις και Διασύνδεση (interface) Κάποια κλάση που πραγματοποιεί (realizes) τη διασύνδεση έχει την υποχρέωση να υλοποιήσει όλες τις λειτουργίες της διασύνδεσης Το "κέρδος" για την κλάση είναι ότι τα αντικείμενά της θα έχουν τον τύπο της διασύνδεσης και επομένως θα μπορούν να χρησιμοποιηθούν όπου αναμένονται αντικείμενα του τύπου της διασύνδεσης Κλάσεις που δεν έχουν καμία σχέση μεταξύ τους (π.χ. δεν ανήκουν στην ίδια ιεραρχία τύπων) μπορούν να υλοποιήσουν μια διασύνδεση και να ωφεληθούν από λειτουργίες που ενεργούν σε αντικείμενα αυτής της διασύνδεσης. 15

Αφαιρετικές κλάσεις και Διασύνδεση (interface) Σχέση Πραγματοποίησης/Υλοποίησης (Realization/implements) Σε μία σχέση πραγματοποίησης, μία οντότητα (διεπαφή) καθορίζει μια λειτουργικότητα και οι άλλες οντότητες (κλάσεις) υλοποιούν αυτή τη λειτουργικότητα Αφαιρετικές κλάσεις και Διασύνδεση (interface) Συμβολισμός στη UML 1. Σύμβολο κλάσης και λέξη-κλειδί «Interface» πάνω από το όνομα της κλάσης Διαμέρισμα ιδιοτήτων: ή δεν υπάρχει ή είναι κενό Μια κλάση που υλοποιεί τη διασύνδεση συσχετίζεται με αυτήν με το σύμβολο της πραγματοποίησης (realization), όπως στη γενίκευση, αλλά με γραμμή που είναι διακεκομμένη 2. Ένας μικρός άδειος κύκλος με το όνομα της διασύνδεσης κάτω από τον κύκλο Η πραγματοποίηση της διασύνδεσης με την κλάση απεικονίζεται με μία γραμμή που συνενώνει την κλάση που πραγματοποιεί τη διασύνδεση με το μικρό άδειο κύκλο που συμβολίζει τη διασύνδεση 16

Αφαιρετικές κλάσεις και Διασύνδεση (interface) Μία διασύνδεση που υλοποιείται με το συμβολισμό της κλάσης και δύο κλάσεις που πραγματοποιούν τη διασύνδεση Αφαιρετικές κλάσεις και Διασύνδεση (interface) Εναλλακτικός συμβολισμός για να δείξουμε ότι η κλάση «Baby» υλοποιεί τη διασύνδεση «CryingObject». Εξαιτίας της ομοιότητάς του με γλυφιτζούρι (lollipop), ο συμβολισμός αυτός αναφέρεται ορισμένες φορές και ως συμβολισμός lollipop. 17

Αφαιρετικές κλάσεις και Διασύνδεση (interface) Μία κλάση μπορεί να πραγματοποιεί περισσότερες από μία διασυνδέσεις Άλλες κλάσεις μπορεί να είναι εξαρτημένες από υποσύνολα αυτών των διασυνδέσεων (π.χ. κάποια κλάση ενδέχεται να χρησιμοποιεί λειτουργίες μόνο από μία διασύνδεση μιας άλλης κλάσης, η οποία πραγματοποιεί περισσότερες από μία διασυνδέσεις) Αφαιρετικές κλάσεις και Διασύνδεση (interface) Η κλάση «Baby» υλοποιεί τη διασύνδεση «CuteObject», που παρέχει τη λειτουργία takepicture (φωτογράφιση από φωτογραφική μηχανή) Ένα αντικείμενο της κλάσης «Speaker» ελέγχει την ένταση του κλάματος του μωρού χρησιμοποιώντας τη διασύνδεση «CryingObject» Ένα αντικείμενο της κλάσης «Camera» φωτογραφίζει το μωρό χρησιμοποιώντας τη διασύνδεση «CuteObject» 18

Αφαιρετικές κλάσεις και Διασύνδεση (interface) Οι κλάσεις «Speaker» και «Camera» μπορούν να ελέγξουν τον ήχο και να πάρουν φωτογραφίες οποιωνδήποτε αντικειμένων υλοποιούν τις διασυνδέσεις «CryingObject» και «CuteObject» ΔΕΝ εξαρτώνται από το αντικείμενο «Baby» Η κλάση «Speaker» λειτουργεί και με ένα αντικείμενο της κλάσης «BluesSinger» επειδή υλοποιεί τη διασύνδεση «CryingObject» Αφαιρετικές κλάσεις και Διασύνδεση (interface) Διαμερισμός λειτουργιών μιας κλάσης σε διασυνδέσεις και Ελεγχόμενος τρόπος με τον οποίο άλλες κλάσεις εξαρτώνται από συγκεκριμένα υποσύνολα των διασυνδέσεων και μόνο από αυτά Μία από τις σημαντικότερες τεχνικές για την κατασκευή πολύπλοκων συστημάτων λογισμικού ΓΙΑΤΙ??? Εφόσον μία κλάση δεν χρησιμοποιεί όλες τις λειτουργίες μίας άλλης κλάσης αλλά μόνο ένα καλά καθορισμένο υποσύνολο των λειτουργιών αυτών (μόνο αυτές τις λειτουργίες που παρέχει η διασύνδεση την οποία χρησιμοποιεί) μπορούμε να ελέγξουμε καλύτερα τη διαδικασία των αλλαγών στο λογισμικό (change management, διαχείριση αλλαγών) 19

Αφαιρετικές κλάσεις και Διασύνδεση (interface) Αν αλλάξει η μορφή ή η σημασία της λειτουργίας controlvolume, που παρέχει η διασύνδεση «CryingObject»: ΔΕΝ ανησυχούμε για την κλάση «Camera» (η κλάση αυτή δεν χρησιμοποιεί τη διασύνδεση «CryingObject») Ανησυχούμε για πιθανές αλλαγές στην κλάση «Speaker» Αφαιρετικές κλάσεις και Διασύνδεση (interface) <<interface>> List equals add get implementation (provides interface) Abstract List abstract class equals get add abstract method (no implementation) 20

Abstract κλάσεις και Διασύνδεση (interface) Μία διασύνδεση δεν περιέχει υλοποίηση λειτουργιών Ενώ μια αφηρημένη κλάση μπορεί να παρέχει και την υλοποίηση κάποιων λειτουργιών. Στις διασυνδέσεις και στις αφηρημένες κλάσεις δεν μπορούν να δηλωθούν αντικείμενα. Μια κλάση που κληρονομεί από μια αφηρημένη κλάση πρέπει να υλοποιήσει όλες τις αφηρημένες λειτουργίες της αφηρημένης υπερκλάσης της διαφορετικά θα είναι και αυτή αφηρημένη. Παραμετρικές κλάσεις Ορίζουμε κλάση στην οποία κάποιος τύπος των ιδιοτήτων της κλάσης είναι παράμετρος Παράδειγμα: η περίπτωση των διαφόρων κλάσεων που ορίζουν συλλογές στοιχείων Όταν ορίζουμε μια ουρά προτεραιότητας και θέλουμε να καθορίσουμε την ουρά χωρίς αναφορά στο συγκεκριμένο τύπο των στοιχείων που θα εισαχθούν σε αυτήν ΟΠΟΤΕ μπορούμε να υλοποιήσουμε μία κλάση γενικού σκοπού και να τη χρησιμοποιήσουμε με διάφορους τύπους Σημαντικό πλεονέκτημα: ύπαρξη ισχυρού ελέγχου τύπων στις γλώσσες προγραμματισμού που παρέχουν παραμετρικές κλάσεις 21

Παραμετρικές κλάσεις Σημαντικό πλεονέκτημα: ύπαρξη ισχυρού ελέγχου τύπων στις γλώσσες προγραμματισμού που παρέχουν παραμετρικές κλάσεις Δηλαδή??? Μπορεί κάποιος να δηλώσει μία ουρά από «Persons» αντί για μία γενική ουρά από «Objects» Αυτό παρέχει ασφάλεια τύπων κατά τη διάρκεια της μεταγλώττισης γιατί ο μεταγλωττιστής θα εντοπίσει ως συντακτικό λάθος τις απόπειρες εισαγωγής στην ουρά στοιχείων με τύπο ασύμβατο από αυτόν που χρησιμοποιήθηκε για τη δέσμευση της παραμέτρου: π.χ. απόπειρα εισαγωγής ενός «String» σε μία ουρά από αντικείμενα τύπου «Person» Παραμετρικές κλάσεις Στη UML είναι πρότυπο (template) με ένα ή περισσότερα μη δεσμευμένα στοιχεία. Τα στοιχεία αυτά τυπικά αναπαριστούν έναν τύπο μίας ή περισσοτέρων ιδιοτήτων της κλάσης και μπορούν επίσης να εμφανιστούν στις λειτουργίες της κλάσης ως παράμετροι. Ο συμβολισμός της UML για τις παραμετρικές κλάσεις είναι το σύμβολο της κλάσης με ένα διακεκομμένο τετράγωνο στην πάνω δεξιά γωνία, όπου εισάγονται τα ονόματα, οι τύποι, και οι ες ορισμού τιμές για τις παραμέτρους της κλάσης. Αν ο τύπος της παραμέτρου παραλειφθεί, τότε είναι κάποιος τύπος δεδομένων του συστήματος (π.χ. Όνομα κλάσης) ή της γλώσσας προγραμματισμού που θα χρησιμοποιηθεί για την ανάπτυξη του συστήματος 22

Παραμετρικές κλάσεις Δήλωση για ένα γενικό πίνακα στοιχείων Παραμετρική κλάση «Array» ο τύπος Τ των δεδομένων του πίνακα το μέγεθος Ν του πίνακα δίνονται ως παράμετροι Για το Τ παραλείπεται ο τύπος, οπότε θεωρείται πως είναι τύπος του συστήματος (π.χ. «Person» αν πρόκειται για έναν πίνακα από αντικείμενα τύπου «Person»). To πλήθος των στοιχείων είναι ένας ακέραιος αριθμός και για αυτό καθορίζεται ο τύπος της παραμέτρου Ν ως int. Παραμετρικές κλάσεις Χρήση Τ, Ν στις δηλώσεις των ιδιοτήτων και των λειτουργιών της κλάσης Η ιδιότητα elements είναι τύπου Τ και έχει πολλαπλότητα 1..Ν, όπου το συγκεκριμένο πλήθος (Ν) θα καθοριστεί από την τιμή του Ν κατά τη δέσμευση Η λειτουργία add δέχεται ένα στοιχείο τύπου Τ ως παράμετρο 23

Παραμετρικές κλάσεις Οι παραμετρικές κλάσεις δεν μπορούν να χρησιμοποιηθούν για τη δημιουργία αντικειμένων Για να προκύψουν συγκεκριμένες κλάσεις, από τις οποίες να μπορούν να δημιουργηθούν αντικείμενα, πρέπει να δεσμευθούν οι παράμετροι σε συγκεκριμένους τύπους, τιμές κ.λπ. Π.χ. δεν μπορούμε να δημιουργήσουμε πίνακα με στοιχεία τύπου Τ Πρέπει να δημιουργήσουμε πίνακα με στοιχεία κάποιου συγκεκριμένου τύπου (π.χ. «Person») Αυτές οι συγκεκριμένες κλάσεις ονομάζονται δεσμευμένα στοιχεία (Bound Elements) Παραμετρικές κλάσεις Η δέσμευση αυτή μπορεί να γίνει με δύο τρόπους: με τη δήλωση ενός υπονοούμενου (implicit) δεσμευμένου στοιχείου της παραμετρικής κλάσης ή με τη δήλωση ενός επώνυμου δεσμευμένου στοιχείου της παραμετρικής κλάσης Για να δείξουμε ότι πρόκειται για δέσμευση της παραμετρικής κλάσης, στο σύμβολο της εξάρτησης γράφουμε τη λέξη-κλειδί «bind» και δίνουμε τη λίστα με τις τιμές των παραμέτρων μέσα σε παρενθέσεις, με τη σειρά που δηλώθηκαν στην παραμετρική κλάση. 24

Παραμετρικές κλάσεις α) Δήλωση ανώνυμου δεσμευμένου στοιχείου για την κλάση «Array», που αφορά έναν πίνακα από αντικείμενα τύπου «Person» με μέγεθος 50 β) Απεικόνιση του ίδιου δεσμευμένου στοιχείου με τη χρήση νέας επώνυμης κλάσης που εξαρτάται από την παραμετρική κλάση «Array». Προσδιορισμένες συσχετίσεις (Qualified associations) Όταν υλοποιούμε συσχετίσεις μιας κλάσης με πολλαπλότητα μεγαλύτερη του 1, να μπορούμε περιορίσουμε τη συσχέτιση έτσι ώστε με τη χρήση κάποιας ιδιότητας να ταυτοποιούμε τα αντικείμενα που συμμετέχουν στη συσχέτιση στο άλλο άκρο της συσχέτισης 25

Προσδιορισμένες συσχετίσεις (Qualified associations) Βαθμολόγιο μαθήματος Περιέχει γραμμές και κάθε γραμμή αφορά ένα φοιτητή Βαθμολόγιο γραμμές Γραμμή βαθμολογίου φοιτητής Φοιτητής * 1 Σωστό???? Προσδιορισμένες συσχετίσεις (Qualified associations) Βαθμολόγιο γραμμές Γραμμή βαθμολογίου φοιτητής Φοιτητής * 1 ΟΧΙ! Κάθε γραμμή του βαθμολογίου ΠΡΕΠΕΙ να αφορά ένα διαφορετικό φοιτητή Το διάγραμμα δείχνει ότι κάθε γραμμή του βαθμολογίου αφορά ένα φοιτητή ΔΕΝ μας λέει όμως ότι αφορά διαφορετικό φοιτητή Θα μπορούσε να υπάρξει στιγμιότυπο του συστήματος όπου δύο διαφορετικές γραμμές του ίδιου βαθμολογίου θα αφορούσαν τον ίδιο φοιτητή 26

Προσδιορισμένες συσχετίσεις (Qualified associations) Order Order line Product 1 1..* Amount:Num * 1 id:string γρ1: OrderLine Amount=2 πρ1: Product id= X π1: Order γρ2: OrderLine Amount=4 πρ2: Product id= Y γρ3: OrderLine Amount=1 πρ3: Product id= X Το ίδιο προϊόν ( X ) εμφανίζεται σε δύο παραγγελιογραμμές Προσδιορισμένες συσχετίσεις (Qualified associations) Βαθμολόγιο φοιτητής : Φοιτητής γραμμή 0..1 Γραμμή Βαθμολογίου Λύση: Προσδιορισμένη συσχέτιση Η κλάση «Βαθμολόγιο» έχει πολλές γραμμές αλλά με το προσδιοριστικό φοιτητής στην αρχή της συσχέτισης επισημαίνουμε πως για κάθε αντικείμενο της κλάσης «Φοιτητής» υπάρχει μία ή καμία γραμμή στο βαθμολόγιο (κλάση «Γραμμή Βαθμολογίου») 27

Προσδιορισμένες συσχετίσεις (Qualified associations) Βαθμολόγιο φοιτητής : Φοιτητής γραμμή 0..1 Γραμμή Βαθμολογίου Συμβολισμός: Παραλληλόγραμμο στην κλάση που αποτελεί την πηγή της συσχέτισης μέσα στην οποία αναγράφεται το προσδιοριστικό Το προσδιοριστικό χρησιμοποιείται για τον προσδιορισμό των αντικειμένων που συμμετέχουν στη συσχέτιση στο άλλο άκρο της συσχέτισης Προσδιορισμένες συσχετίσεις (Qualified associations) Βαθμολόγιο φοιτητής : Φοιτητής γραμμή 0..1 Γραμμή Βαθμολογίου Εδώ πολλαπλότητα 0..1 (δηλαδή προαιρετική) Αν η πολλαπλότητα ήταν 1, τότε θα ήταν υποχρεωτική, θα έπρεπε δηλαδή για κάθε αντικείμενο της κλάσης «Φοιτητής» να υπάρχει οπωσδήποτε μία γραμμή στο βαθμολόγιο (αντικείμενο της κλάσης «Γραμμή Βαθμολογίου») 28

Προσδιορισμένες συσχετίσεις (Qualified associations) Order Product line item 0..1 Order line Amount: Num Σε μια παραγγελία υπάρχει το πολύ μια παραγγελιογραμμή για κάθε προϊόν Order Product line item 1 Order line Amount: Num Σε μια παραγγελία υπάρχει ακριβώς μια παραγγελιογραμμή για κάθε προϊόν Order Product line item * Order line Amount: Num Σε μια παραγγελία μπορεί να υπάρχει καμία, μία ή περισσότερες παραγγελιογραμμές για κάθε προϊόν Προσδιορισμένες συσχετίσεις (Qualified associations) Order Product line item * Order line Amount: Num Σε μια παραγγελία μπορεί να υπάρχει καμία, μία ή περισσότερες παραγγελιογραμμές για κάθε προϊόν Αυτό επιτρέπει την κατάσταση: γρ1: OrderLine Amount=2 π1: Order γρ2: OrderLine Amount=4 γρ3: OrderLine Amount=1 πρ1: Product id= X πρ2: Product id= Y πρ3: Product id= X 29

Εξαρτήσεις (dependencies) Συμβολίζονται με διακεκομμένα βέλη και συνδέουν ένα διαγραμματικό στοιχείο από το οποίο ξεκινούν που ονομάζεται στοιχείο προέλευση με ένα άλλο διαγραμματικό στοιχείο στο οποίο καταλήγουν που ονομάζεται στοιχείο προορισμός Αν μεταβληθεί το στοιχείο προέλευση θα πρέπει πιθανώς να αλλάξει και το στοιχείο προορισμός Παράδειγμα στις παραμετρικές κλάσεις: εξάρτηση με τη λέξη κλειδί «bind» που χρησιμοποιείται για να συνδέσουμε ένα δεσμευμένο στοιχείο με την παραμετρική του κλάση Παραμετρικές κλάσεις α) Δήλωση ανώνυμου δεσμευμένου στοιχείου για την κλάση «Array», που αφορά έναν πίνακα από αντικείμενα τύπου «Person» με μέγεθος 50 β) Απεικόνιση του ίδιου δεσμευμένου στοιχείου με τη χρήση νέας επώνυμης κλάσης που εξαρτάται από την παραμετρική κλάση «Array». 30

Εξαρτήσεις (dependencies) Οι εξαρτήσεις ΔΕΝ είναι μεταβατικές Αν η κλάση «Α» εξαρτάται από τη «Β» και η «Β» από τη «Γ», ΔΕΝ σημαίνει πως η «Α» εξαρτάται από τη «Γ» Αυτό είναι σημαντικό γιατί αν αλλάξουμε τη «Γ» τότε ενδέχεται να αλλάξει η «Β» που εξαρτάται από αυτήν Ενδέχεται όμως η «Α» να μην χρειάζεται να αλλάξει αν οι αλλαγές που έγιναν στη «Β» δεν επηρεάζουν την «Α» Αν ισχύει αυτό, τότε η «Α» παραμένει ως έχει και οι άλλες κλάσεις που εξαρτώνται απο αυτήν δεν χρειάζεται να ελεγχθούν Παράδειγμα εξάρτησης κλήσης λειτουργίας Διάγραμμα κλάσεων που απεικονίζει κάποιες κλάσεις που μας επιτρέπουν να βρούμε τον καλύτερο φοιτητή («student») για ένα μάθημα («course») 31

Παράδειγμα εξάρτησης κλήσης λειτουργίας Για να ανακτήσει η λειτουργία getbestname() της «Course» το όνομα του καλύτερου φοιτητή: Εύρεση καλύτερου «CourseRecord» (εγγραφή φοιτητή σε μάθημα) - αυτό με την υψηλότερη βαθμολογία Κλήση λειτουργίας getstudent() σε αυτό το «CourseRecord» για να ανακτήσει το αντικείμενοφοιτητής με την υψηλότερη βαθμολογία Παράδειγμα εξάρτησης κλήσης λειτουργίας Η ανάκτηση του ονόματος του καλύτερου φοιτητή γίνεται με την κλήση της λειτουργίας getname() σε αυτό το αντικείμενο student Η κλάση «Course» δεν συσχετίζεται άμεσα με την κλάση «Student» υπάρχει ΟΜΩΣ εξάρτηση της «Course» από τον «Student» διότι καλεί μία λειτουργία σε αυτήν 32

Παράδειγμα εξάρτησης κλήσης λειτουργίας Αν η λειτουργία αλλάξει όνομα, η κλάση «Course» θα πρέπει να μεταγλωττιστεί Εξάρτηση: διακεκομμένο βέλος από την κλάση «Course» στην κλάση «Student» και λέξη-κλειδί «call» για να δείξουμε ότι η εξάρτηση αφορά την κλήση μιας λειτουργίας Είδη κλάσεων Κλάσεις οντοτήτων: αναπαριστούν οντότητες (απτές ή αφηρημένες) του πραγματικού κόσμου Συνοριακές κλάσεις (boundary classes): αναλαμβάνουν την επικοινωνία μίας κλάσης οντοτήτων με τον εξωτερικό κόσμο (χρήστη, άλλες κλάσεις κλπ) αρχικά, συνήθως έχουμε μία Σ.Κ. για κάθε Κ.Ο. Κλάσεις ελέγχου (control classes): αναλαμβάνουν τον έλεγχο της ροής εργασιών αρχικά συνήθως έχουμε μία για κάθε περίπτωση χρήσης 33

Συνοψίζοντας... Δομική μοντελοποίηση η πιο καθοριστική όψη της μοντελοποίησης Καθορίζει τα προς αποθήκευση δεδομένα, τον τρόπο υλοποίησης της συμπεριφοράς (τρόπο υλοποίησης των λειτουργιών του συστήματος)... Μοντελοποίηση δομής σταδιακά Αρχικό στάδιο Εντοπισμός σημαντικών εννοιών πεδίου εφαρμογής / Αναγνώριση κλάσεων συστήματος Δήλωσή τους ως κλάσεις, πρόσθεση βασικών γνωρισμάτων και ορισμός συσχετίσεων μεταξύ των κλάσεων ΑΠΟΤΕΛΕΣΜΑ: διάγραμμα κατανοητό από έναν ειδικό του πεδίου εφαρμογής (πελάτη), δεν σχετίζεται με θέματα υλοποίησης ή άλλα τεχνικά θέματα Συνοψίζοντας... Το διάγραμμα χρήσιμο στην επικοινωνία με τον πελάτη για να: (α) βεβαιωθούμε ότι έχουμε κατανοήσει και μοντελοποιήσει ορθά τον κόσμο της εφαρμογής (β) ζητήσουμε διευκρινήσεις και επιπλέον λεπτομέρειες για κάποια σημεία του (γ) έχουμε ένα κοινό σημείο αναφοράς και συμφωνίας με τον πελάτη 34

Συνοψίζοντας... Κατά τη μετάβαση από την ανάλυση στη σχεδίαση και υλοποίηση συμπλήρωση και εκλέπτυνση περιγραφής κλάσεων και συσχετίσεών τους (προσθήκη γνωρισμάτων, λειτουργιών,...). Χρήση UML για τη δήλωση των κλάσεων: Kαλή εποπτική εικόνα σχεδίου Έλεγχος για το αν το διάγραμμα καλύπτει τις απαιτήσεις Διερεύνηση εναλλακτικών τρόπων μοντελοποίησης Εντοπισμός λαθών Εύκολη επέκταση αν απαραίτητη Γρήγορες αλλαγές λόγω γραφικού περιβάλλοντος Σε επόμενο στάδιο Εξειδίκευση διαγράμματος κλάσεων βάσει γλώσσας προγραμματισμού Πηγές Ε. Κιουντούζης, Μεθοδολογίες Ανάλυσης και Σχεδιασμού Πληροφοριακών Συστημάτων,Εκδόσεις Α.Σταμούλη, Αθήνα 2002 Γιάννης Τζίτζικας. Ανάλυση και Σχεδίαση Πληροφοριακών Συστημάτων, Πανεπιστήμιο Κρήτης Shari Lawrence Pfleeger. Τεχνολογία Λογισμικού: Θεωρία και Πράξη, τόμος 1, Κλειδάριθμος, Αθήνα, 2003 Leszek A. Maciaszek, Requirements Analysis and System Design (2nd edition), Addison Wesley, 2005 A.Dennis, B. Haley Wixom, D. Tegarden, Systems Analysis and Design with UML Version 2.0 (2nd edition) Wiley, 2005 Booch G., Rumbaugh J., Jacobson I. Unified Modeling Language User Guide. Addison- Wesley Professional 2 Edition, ISBN 0321267974. Pascal Roques, UML in Practice, John Wiley, 2004 UML Fundamentals & OOAD UML 2.0, www.acm.org Αφροδίτη Τσαλγατίδου. Εισαγωγή στη UML, Καποδιστριακό Πανεπιστήμιο Αθηνών Αντικειμενοστρεφής Ανάπτυξη Λογισμικού με τη UML, επιμέλεια Π. Φιτσιλής, Κλειδάριθμος 2006 Ιωάννης Γαβιώτης. Πληροφοριακά Συστήματα Μοντελοποίηση με UML, Πανεπιστήμιο Αιγαίου www.agilemodeling.com/style/classdiagram.htm http://www.devx.com/enterprise/article/28576 35