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

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

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

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

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

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

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

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

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

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

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

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

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

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

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

Βασικά της γλώσσας JAVA

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

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

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

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

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

POINTERS, AGGREGATION, COMPOSITION

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Copy Constructor Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Mεταβλητές (variables) και Σταθερές (constants)

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Ευάγγελος Γ. Ούτσιος Θεόδωρος Γ. Λάντζος Διάλεξη Νο2-Νο3

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

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

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

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

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

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

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΕΙΣ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Ιανουάριος 2007 Οι απαντήσεις να είναι καθαρογραμμένες με ευδιάκριτους όλους του χαρακτήρες.

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

ΚΛΑΣΕΙΣ ΜΕΘΟΔΟΙ - ΑΝΤΙΚΕΙΜΕΝΑ

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

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

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

ΣΥΣΧΕΤΙΣΕΙΣ ΚΛΑΣΕΩΝ (Class relationships)

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

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

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

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

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Transcript:

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

Διαγράμματα Κλάσεων Τα βασικά στοιχεία

Διαλέξεις παρουσιάσεις Το υλικό του μαθήματος στηρίζεται στο υλικό που χρησιμοποίησε ο κ. Σταμέλος στις παραδόσεις του για το μάθημα τα προηγούμενα χρόνια.

Οπτικές γωνίες αναπαράστασης συστημάτων 1. Μοντέλο Πεδίου Προβλήματος (domain model) Στο μοντέλο αυτό καταγράφονται ως κλάσεις οι έννοιες του πεδίου του προβλήματος, χωρίς να υπάρχει δέσμευση πως αυτές οι ίδιες κλάσεις θα υπάρχουν και στο λογισμικό που θα κατασκευαστεί 2. Eπίπεδο του πεδίου προβλήματος του λογισμικού Κατά τη φάση της επεξεργασίας, το μοντέλο του πεδίου του προβλήματος θα αποτελέσει πηγή έμπνευσης για το επίπεδο του πεδίου προβλήματος του λογισμικού Σύγκριση: Οντότητες του πεδίου Προβλήματος (1) Κλάσεις του Λογισμικού (2) Υψηλού επιπέδου υποχρεώσεις (1) Μέθοδοι (2)

Κλάση Οι κλάσεις αποτελούν τη βάση της κατασκευής οποιουδήποτε αντικειμενοστρεφούς συστήματος. Ενσωματώνουν τα δεδομένα καθώς και τις λειτουργίες που επενεργούν στα δεδομένα αυτά. Συμβολίζονται με ένα παραλληλόγραμμο που έχει τρία διαμερίσματα. Στο πάνω διαμέρισμα αναγράφεται το όνομα της κλάσης, στο μεσαίο διαμέρισμα απεικονίζονται οι ιδιότητες, και στο κάτω διαμέρισμα οι λειτουργίες. Account - balance : Money + withdraw(amount : Money) + deposit(amount : Money)

Δημόσια και Ιδιωτικά Χαρακτηριστικά Το συνηθισμένο σε μία κλάση είναι ότι οι ιδιότητες είναι ιδιωτικές (private) και οι λειτουργίες δημόσιες (public). Ιδιωτικά είναι τα χαρακτηριστικά μιας κλάσης (ιδιότητες ή λειτουργίες) που δεν είναι προσπελάσιμα από άλλες κλάσεις δημόσια αυτά που είναι προσπελάσιμα από άλλες κλάσεις. Αρχή απόκρυψης δεδομένων (data hiding principle): Εύκολη αλλαγή της εσωτερικής αναπαράστασης δεδομένων Εφαρμογή πολιτικών ελέγχου από τις μεθόδους

Σύμβολα Πρόσβασης στη UML Το σύμβολο χρησιμοποιείται για να δηλώσει ιδιωτική πρόσβαση Tο + σημαίνει δημόσια πρόσβαση. Η πρόσβαση #, που είναι προστατευμένη πρόσβαση, έχει τη σημασία πως η ιδιότητα ή λειτουργία είναι προσπελάσιμη από την κλάση και τις τυχόν υποκλάσεις της. Η πρόσβαση σε επίπεδο πακέτου έχει την επισήμανση ~ και τη σημασία πως η ιδιότητα ή λειτουργία είναι προσπελάσιμη από την κλάση στην οποία δηλώνεται και τις άλλες κλάσεις που βρίσκονται στο ίδιο πακέτο με αυτήν. Τέλος, μη χρήση συμβόλου πρόσβασης σημαίνει πως η πρόσβαση δεν φαίνεται, αλλά αυτό δε σημαίνει πως δεν υπάρχει πρόσβαση ή πως η πρόσβαση είναι δημόσια.

Συντακτικό Ιδιοτήτων στη UML Το πλήρες συντακτικό για τη δήλωση ιδιοτήτων στη UML είναι: Προσδιοριστής-πρόσβασης όνομαιδιότητας: Τύπος [πολλαπλότητα διάταξη] = Αρχική-τιμή {συμβολοσειρά ιδιοτήτων Μερικά Παραδείγματα: - students : string[* ordered] - interestrate : double = 0.035 {frozen

Συντακτικό Λειτουργιών στη UML Το πλήρες συντακτικό για τη δήλωση λειτουργιών στη UML είναι: Προσδιοριστής-πρόσβασης όνομα (λίσταπαραμέτρων) : τύπος-επιστροφής {συμβολοσειρά ιδιοτήτων Συντακτικό λίστας παραμέτρων: [in out inout] όνομα-παραμέτρου : τύπος = εξ ορισμού τιμή Μερικά παραδείγματα: + withdraw(in amount : Money) : boolean + getbalance():money {query

Λειτουργίες με Εμβέλεια Κλάσης Κάποιες ιδιότητες ή λειτουργίες έχουν εμβέλεια κλάσης και όχι αντικειμένου. Έστω, για παράδειγμα, ότι θέλουμε να μπορούμε να δημιουργήσουμε αντικείμενα Account διαβάζοντας τα στοιχεία για τη δημιουργία κάθε τέτοιου αντικειμένου από μια βάση δεδομένων. Θα μπορούσαμε να δηλώσουμε μια λειτουργία με το εξής συντακτικό: +createaccount(accountid : String) : Account - balance : Money Account + create(accountid : String) : Account + deposit(am ount : Money) + withdraw(amount : Money)

Συσχετίσεις Κλάσεων Μια συσχέτιση (association) μεταξύ δύο κλάσεων απεικονίζει μία στατική σχέση μεταξύ των δύο κλάσεων. Απεικονίζουν σχέσεις μεταξύ κλάσεων που είναι αναγκαίες σε μόνιμη βάση Για την αναπαράσταση μιας συσχέτισης χρησιμοποιούμε μία γραμμή μεταξύ των δύο κλάσεων. όπως δείχνει η Εικόνα Account 1..* -accounts has -holders 1..* Customer

Ονόματα Άκρων Συσχέτισης Σε κάθε άκρο μίας συσχέτισης μπορούμε να βάλουμε ένα όνομα που υποδηλώνει το ρόλο αυτής της κλάσης στη συσχέτιση. Επειδή το όνομα του άκρου συσχέτισης προσδιορίζει το ρόλο μίας κλάσης στη συσχέτιση, μερικές φορές αναφέρεται και ως όνομα ρόλου (rolename) Απαραίτητο όταν δύο κλάσεις συνδέονται με περισσότερες από μία συσχετίσεις όπως στην Εικόνα Department -teachers 1..* Teacher -president 1

Πολλαπλότητα Η πολλαπλότητα (multiplicity) αφορά ένα πέρας μίας συσχέτισης και είναι το πλήθος των αντικειμένων που μπορεί πιθανώς να συσχετίζονται με ένα αντικείμενο της άλλης κλάσης κατά τη διάρκεια της εκτέλεσης του προγράμματος Στο παράδειγμα ένας λογαριασμός έχει έναν ή περισσότερους δικαιούχους και ένας πελάτης έχει έναν ή περισσότερους λογαριασμούς Άλλες πιθανές τιμές για την πολλαπλότητα είναι οι * (που σημαίνει 0 ή περισσότερες), 0..1 (που σημαίνει 0 ή 1, δηλαδή προαιρετική συσχέτιση), κάποιος συγκεκριμένος αριθμός (π.χ. 11), ή και κάποια συγκεκριμένη περιοχή τιμών όπως 2..4 Account 1..* -accounts has -holders 1..* Customer

Πλοϊμότητα Η πλοϊμότητα (navigability) σε μία συσχέτιση συμβολίζεται με ένα βέλος στο πέρας της συσχέτισης και υποδηλώνει πλοϊμότητα μόνο προς τη φορά του βέλους Αφορά τη δυνατότητα που έχουμε από μία κλάση να ανακτήσουμε αντικείμενα της άλλης σε μία συσχέτιση Στην Εικόνα υπάρχει πλοϊμότητα μόνο από την κλάση «Department» προς την κλάση «Teacher»: έχοντας ένα αντικείμενο Department μπορούμε να βρούμε ποιοι διδάσκουν σε αυτό το τμήμα ή ποιος είναι ο πρόεδρός του, αλλά έχοντας ένα αντικείμενο Teacher δεν μπορούμε να βρούμε σε ποιο τμήμα διδάσκει Department -teachers 1..* Teacher -president 1

Παράδειγμα Συσχετίσεων στη Java Στο παράδειγμά μας έχουμε μία κλάση «Teacher», η οποία αφορά έναν εκπαιδευτικό. Κάθε εκπαιδευτικός έχει ένα όνομα που είναι αλφαριθμητικό (String). Επειδή ο εκπαιδευτικός δεν έχει την υποχρέωση να γνωρίζει το τμήμα στο οποίο ανήκει μια και δεν υπάρχει πλοϊμότητα από την κλάση «Teacher» προς την κλάση «Department», η κλάση «Teacher» δεν αναφέρεται καθόλου στην κλάση «Department».

Κώδικας της Κλάσης Teacher public class Teacher { private String 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; public int hashcode() { return name.hashcode();

Κώδικας της κλάσης Department (1) διάφορα import public class Department { private Teacher president; private Set<Teacher> teachers; private String name; public Department(String name) { this.name = name; this.teachers = new HashSet<Teacher>(); public boolean addteacher(teacher t) { return teachers.add(t); public boolean removeteacher(teacher t) { return teachers.remove(t);

Κώδικας της κλάσης Department (2) public boolean findteacher(teacher t) { return teachers.contains(t); public void setpresident(teacher t) { this.president = t; public Teacher getpresident() { return president; public void printteachers() { Iterator<Teacher> iterator = teachers.iterator(); while (iterator.hasnext()) { Teacher t = iterator.next(); System.out.println(t.getName());

Μέθοδος Ελέγχου (main) public static void main(string args[]) { Teacher george = new Teacher("Γιώργος Κακαρόντζας"); Teacher george1 = new Teacher("Γιώργος Κακαρόντζας"); Department dept = new Department("Τμήμα ΧΥΖ"); dept.addteacher(george); //αυτήν η εισαγωγή θα αποτύχει! boolean ok = dept.addteacher(george1); if (!ok) { System.out.println("Η εισαγωγή απέτυχε"); System.out.println("Εκπαιδευτικοί:"); dept.printteachers(); dept.setpresident(george); System.out.println("Πρόεδρος: "+dept.getpresident().getname());

Συσχέτισης Γενίκευσης Η γενίκευση είναι μία ειδική μορφή συσχέτισης, κατά την οποία μία γενική κλάση αποτελεί τη βάση για τη δήλωση μίας ή περισσοτέρων ειδικότερων, υπό κάποια έννοια, κλάσεων. Η γενική κλάση ονομάζεται υπερκλάση και οι ειδικές κλάσεις ονομάζονται υποκλάσεις. Το σύμβολο της γενίκευσης είναι ένα βέλος που δείχνει από την ειδική στη γενική κλάση. Person - name : String - age : int + setname(name : String) + getname() : String + setage(age : int) + getage() : int + tostring() : String Student - fieldofstudy : String + setfieldofstudy(fieldofstudy : String) + getfieldofstudy() : String + tostring() : String

Παράδειγμα Γενίκευσης στη Java Οι κλάσεις «Person» και «Student» στην Java δίνονται στη Λίστα Κώδικα που ακολουθεί. Παρατηρήστε ότι η κλάση «Student» δηλώνεται ως υποκλάση της κλάσης «Person» με τη χρήση της φράσης extends στη δήλωσή της, επίσης, η κλάση «Student» υπερβαίνει τη μέθοδο tostring της υπερκλάσης της δηλώνοντας τη μέθοδο tostring εκ νέου. Person - name : String - age : int + setname(name : String) + getname() : String + setage(age : int) + getage() : int + tostring() : String Student - fieldofstudy : String + setfieldofstudy(fieldofstudy : String) + getfieldofstudy() : String + tostring() : String

Η Κλάση Person public class Person { protected String name; private int age; public Person() { public void setname(string name) {this.name = name; public void setage(int age) {this.age = age; public String getname() {return name; public int getage() {return age; public String tostring() { return "Είμαι ο " + name + " και είμαι " + age + " ετών.";

Η Κλάση Student public class Student extends Person { private String fieldofstudy; public void setfieldofstudy(string fieldofstudy) { this.fieldofstudy = fieldofstudy; public String getfield() { return fieldofstudy; // Νέα δήλωση (υπέρβαση) της μεθόδου tostring ειδικά για τους φοιτητές public String tostring() { return "Είμαι o " + name + " και είμαι " + getage() + " ετών. "+ Σπουδάζω " + fieldofstudy;