Σύνθεση και Συνάθροιση

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

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

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

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

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

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

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

POINTERS, AGGREGATION, COMPOSITION

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

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

9. ΑΝΤΙΚΕΙΜΕΝΑ ΩΣ ΟΡΙΣΜΑΤΑ

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 7 : ΣΥΝΘΕΤΕΣ ΚΛΑΣΕΙΣ ΚΑΙ ΜΕΘΟΔΟΙ

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

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

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

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

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

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies

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

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

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

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

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

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

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

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

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

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

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

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

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

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

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

API: Applications Programming Interface

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

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

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

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

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

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

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

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

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

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

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

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

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

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

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

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

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

Πολλές φορές έχουμε πολλές μεταβλητές του ίδιου τύπου που συσχετίζονται και θέλουμε να τις βάλουμε μαζί.

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Συλλογές

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Tοπικές μεταβλητές To αντικείμενο this Accessor, Mutator μέθοδοι

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Χρήση Δομών String processing Στατικές μέθοδοι και μεταβλητές

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

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

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

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

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

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

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

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

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

4 Συλλογές Αντικειμένων

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

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

ΑΣΚΗΣΕΙΣ ΕΡΓΑΣΤΗΡΙΟΥ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Transcript:

Προχωρημένος Προγραμματισμός Σύνθεση και Συνάθροιση ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2020-2021 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ 1

Περίληψη Σήμερα... θα αναφερθούμε στα UML διαγράμματα θα συζητήσουμε τις σχέσεις σύνθεσης και συνάθροισης μεταξύ των κλάσεων θα μελετήσουμε ένα ολοκληρωμένο παράδειγμα 2

Η γλώσσα UML η UML (Unified Modeling Language) είναι μια γλώσσα για να περιγράφουμε και να καταλαβαίνουμε τον κώδικα μας τα UML διαγράμματα παρέχουν μια οπτικοποίηση των σχέσεων μεταξύ των κλάσεων π.χ. MyList MyListElement Person 3

Σχέσεις κλάσεων θέμα που προκύπτει όταν έχουμε κλάσεις που περιέχουν αντικείμενα άλλων κλάσεων:? πότε και πού θα γίνεται η δημιουργία των αντικειμένων και πότε η καταστροφή τους; π.χ., 1. τα αντικείμενα τύπου MyListElement στο προηγούμενο παράδειγμα δημιουργούνται μέσα στην κλάση MyList καταστρέφονται είτε μέσα στην MyList ή αν το αντίστοιχο αντικείμενο MyList καταστραφεί αλλαγές σε αντικείμενα MyListElement γίνονται μόνο μέσα στη MyList 2. τα αντικείμενα τύπου Person που χρησιμοποιούνται στην MyListElement δημιουργούνται εκτός της κλάσης μπορεί να υπάρχουν αφού καταστραφεί η κλάση αλλαγές στα αντικείμενα Person επηρεάζουν και τα περιεχόμενα της MyList (και το αντίστροφο) συχνά οι σχέσεις του πρώτου τύπου λέγονται σχέσεις σύνθεσης, ενώ του δεύτερου σχέσεις συνάθροισης 4

Σχέση σύνθεσης (Composition) η κλάση A έχει σχέση σύνθεσης με την κλάση B, αν το αντικείμενο της κλάσης A αποτελείται από αντικείμενα της κλάσης B τα αντικείμενα της κλάσης B δημιουργούνται από την κλάση A δεν υπάρχουν εκτός της κλάσης A καταστρέφονται όταν καταστρέφεται το (αντίστοιχο) αντικείμενο της κλάσης A παραδείγματα: ένας άνθρωπος αποτελείται από μέρη του σώματος: κεφάλι, πόδια, χέρια κλπ. ένα κτήριο αποτελείται από τοίχους, δωμάτια, πόρτες, κλπ. στην περίπτωση μας η κλάση MyList έχει σχέση σύνθεσης με την κλάση MyListElement 5

Σχέση συνάθροισης (Aggregation) η κλάση A έχει σχέση συνάθροισης με την κλάση B, αν το αντικείμενο (ή αντικείμενα) της κλάσης B ανήκουν στο αντικείμενο της κλάσης A τα αντικείμενα της κλάσης B έχουν υπόσταση και εκτός της κλάσης A όταν καταστρέφεται το (αντίστοιχο) αντικείμενο της κλάσης A δεν καταστρέφονται απαραίτητα και τα αντικείμενα της κλάσης B παραδείγματα: σε έναν άνθρωπο μπορεί να ανήκει ένα αυτοκίνητο, ρούχα, κλπ. ένα κτήριο μπορεί να έχει μέσα ανθρώπους, έπιπλα, κλπ. στην περίπτωση μας η κλάση MyListElement έχει σχέση συνάθροισης με την κλάση Person 6

Σύνθεση και Συνάθροιση UML διαγράμματα για να ξεχωρίζουν μεταξύ τους (κάποιες φορές) αναπαριστώνται διαφορετικά στα UML διαγράμματα MyList Σχέση σύνθεσης Σχέση συνάθροισης MyListElement Person 7

Σύνθεση και Συνάθροιση Ορισμός σχέσης το αν θα είναι μια σχέση, σχέση σύνθεσης ή συνάθροισης εξαρτάται κατά πολύ: 1. από την υλοποίηση μας και 2. το σχεδιασμό π.χ., σε ένα διαφορετικό πρόγραμμα μπορεί να επαναχρησιμοποιούμε το MyListElement π.χ., σε μία διαφορετική εφαρμογή, τα ανθρώπινα όργανα υπάρχουν και χωρίς τον άνθρωπο 8

Σύνθεση και Συνάθροιση Ορισμός σχέσης - Προσοχή! ο διαχωρισμός σε σχέσεις συνάθροισης και σύνθεσης είναι ως ένα βαθμό ένας φορμαλισμός μην «κολλήσετε» προσπαθώντας να ορίσετε τη σχέση το σημαντικό είναι όταν δημιουργείτε το πρόγραμμα σας να σκεφτείτε: ποιες κλάσεις χρειάζονται τα αντικείμενα που δημιουργούνται πότε πρέπει να δημιουργηθούν μέσα στον κώδικα ποιες κλάσεις επηρεάζονται όταν αλλάζουν δεν υπάρχει χρυσός κανόνας συνήθως, το κάθε πρόγραμμα μπορεί να σχεδιαστεί με πολλούς τρόπους διαλέξτε αυτόν που θα κάνει το πρόγραμμα: πιο απλό, ευανάγνωστο, εύκολο να επεκταθεί, να ξαναχρησιμοποιηθεί και να διατηρηθεί. 9

Ολοκληρωμένο παράδειγμα 10

Περιγραφή θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα του ΤΕΙ το τμήμα έχει 4 φοιτητές οπού ο καθένας έχει ένα όνομα και ένα αριθμό μητρώου (ΑΜ) 2 καθηγητές που ο καθένας έχει ένα όνομα και ένα ΑΦΜ το τμήμα δίνει 2 μαθήματα το κάθε μάθημα έχει κωδικό και όνομα και κάποιες διδακτικές μονάδες. ανατίθεται σε ένα καθηγητή οι φοιτητές γράφονται σε κάποιο μάθημα αν περάσουν το μάθημα παίρνουν τις μονάδες θέλουμε να μπορούμε να τυπώσουμε τις πληροφορίες για το μάθημα το όνομα, τον καθηγητή και τη λίστα των φοιτητών που παίρνουν το μάθημα 11

Περιγραφή - Υποψήφιες κλάσεις, μέθοδοι και μηνύματα θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα του ΤΕΙ το τμήμα έχει 4 φοιτητές οπού ο καθένας έχει ένα όνομα και ένα αριθμό μητρώου (ΑΜ) 2 καθηγητές που ο καθένας έχει ένα όνομα και ένα ΑΦΜ το τμήμα δίνει 2 μαθήματα το κάθε μάθημα έχει κωδικό και όνομα και κάποιες διδακτικές μονάδες. ανατίθεται σε ένα καθηγητή οι φοιτητές γράφονται σε κάποιο μάθημα αν περάσουν το μάθημα παίρνουν τις μονάδες θέλουμε να μπορούμε να τυπώσουμε τις πληροφορίες για το μάθημα το όνομα, τον καθηγητή και τη λίστα των φοιτητών που παίρνουν το μάθημα 12

Περιγραφή - Υποψήφιες κλάσεις, μέθοδοι και μηνύματα ουσιαστικά: τμήμα φοιτητές καθηγητές μαθήματα όνομα ΑΜ, ΑΦΜ, κωδικός βαθμός λίστα φοιτητών τα ουσιαστικά είναι υποψήφια για κλάσεις ή πεδία ρήματα: ανατίθεται εγγράφεται τυπώνει περνάω μάθημα παίρνω μονάδες τα ρήματα είναι υποψήφια για να γίνουν μέθοδοι και μηνύματα μεταξύ αντικειμένων 13

Περιγραφή - Υποψήφιες κλάσεις, μέθοδοι και μηνύματα ουσιαστικά: τμήμα φοιτητές καθηγητές μαθήματα όνομα ΑΜ, ΑΦΜ, κωδικός βαθμός λίστα φοιτητών τα ουσιαστικά είναι υποψήφια για κλάσεις ή πεδία ρήματα: ανατίθεται εγγράφεται τυπώνει περνάω μάθημα παίρνω μονάδες τα ρήματα είναι υποψήφια για να γίνουν μέθοδοι και μηνύματα μεταξύ αντικειμένων Όλα τα ουσιαστικά μπορούν να γίνουν κλάσεις αλλά συνήθως επιλέγουμε αυτά για τα οποία υπάρχει αρκετή πολυπλοκότητα 14

Υλοποίηση - Κλάση Professor κρατάει το όνομα και το ΑΦΜ του καθηγητή ενδεχομένως να κρατάει και τα μαθήματα που έχει αναλάβει? η μέθοδος για να αναλάβει ο καθηγητής ένα μάθημα θα πρέπει να είναι εδώ ή στην κλάση του μαθήματος; 15

Υλοποίηση - Κλάση Student κρατάει το όνομα του φοιτητή και τις μονάδες που έχει πάρει μέχρι τώρα ενδεχομένως να κρατάει και τα μαθήματα που παίρνει ενδεχομένως να κρατάει και τη λίστα με τα μαθήματα που έχει περάσει χρειαζόμαστε μέθοδο: για να γραφτεί ο φοιτητής στο μάθημα, ή να το περάσει? ή καλύτερα να τις βάλουμε στην κλάση του μαθήματος; 16

Υλοποίηση - Κλάση Course κρατάει: το όνομα του μαθήματος τις μονάδες του μαθήματος τον καθηγητή που κάνει το μάθημα τους φοιτητές που παίρνουν το μάθημα? τίποτα άλλο;? τι θα κάνουμε με τους βαθμούς και το ποιος πέρασε το μάθημα; μέθοδοι: ανάθεση καθηγητή εγγραφή φοιτητή στο μάθημα καταχώρηση βαθμών στους φοιτητές 17

Υλοποίηση - Κλάση Department τα βάζει όλα μαζί εδώ δημιουργούμε τους φοιτητές, τους καθηγητές και τα μαθήματα οι φοιτητές και οι καθηγητές ως άτομα θα μπορούσαν να υπάρχουν και εκτός του τμήματος εδώ δημιουργούμε τη main? xρειαζόμαστε άλλη κλάση; 18

Υλοποίηση - Κλάση StudentRecord xρειαζόμαστε να κρατάμε για κάθε φοιτητή τις πληροφορίες του (π.χ. αυτά που έχουμε στο eclass) το βαθμό του μας βολεύει να δημιουργήσουμε μια καινούρια κλάση που να βάζει μαζί αυτές τις πληροφορίες 19

Υλοποίηση - UML διάγραμμα Department Student Course Professor StudentRecord 20

Υλοποίηση - Αποθήκευση φοιτητών η κλάση Course πρέπει να αποθηκεύει τους φοιτητές που παίρνουν το μάθημα δε ξέρουμε εκ των προτέρων πόσοι φοιτητές θα πάρουν το μάθημα θα χρησιμοποιήσουμε την κλάση ArrayList για να τους αποθηκεύσουμε 21

Υλοποίηση - Κλάση Professor 1. public class Professor { 2. private String name; 3. private int AFM; 4. private Course lesson; 5. 6. public Professor(String name, int AFM) { 7. this.name = name; 8. this.afm = AFM; 9. } 10. 11. public void setlesson(course c) { 12. lesson = c; 13. } 14. 15. public String tostring() { 16. return name + " " + AFM + " " + lesson; 17. } 18. } 22

Υλοποίηση - Κλάση Student 1. public class Student { 2. private String name; 3. private int AM; 4. private int units = 0; 5. 6. public Student(String name, int am) { 7. this.name = name; 8. AM = am; 9. } 10. 11. public int getam() { return AM; } 12. 13. public void addunits(int units) { this.units += units; } 14. 15. public String tostring() { 16. return name + " AM:" + AM + " units:" + units; 17. } 18. } 23

Υλοποίηση - Κλάση StudentRecord 1. public class StudentRecord { 2. private Student student; 3. private double grade; 4. 5. public StudentRecord(Student s) { student = s; } 6. 7. public int setgrade(double grade) { this.grade = grade; } 8. 9. public Student getstudent() { return student; } 10. 11. public String tostring() { return student + " :" + grade; } 12. 13. public boolean passed() { 14. if (grade >= 5) { return true; } 15. return false; 16. } 17. } 24

Υλοποίηση - Κλάση Course 1. public class Course { 2. private String name; 3. private int code; 4. private int units; 5. private Professor professor; 6. private ArrayList<StudentRecord> studentlist = new ArrayList<StudentRecord>(); 7. 8. public Course(String name, int code, int units) { 9. this.name = name; this.code = code; this.units = units; 10. } 11. 12. public void setprofessor(professor p) { 13. professor = p; 14. p.setlesson(this); 15. } 16. 17. public void enroll(student s) { 18. studentlist.add(new StudentRecord(s)); 19. } χρησιμοποιούμε το this ως αναφορά στο παρόν αντικείμενο, ώστε να το προσθέσουμε στο αντικείμενο Professor δημιουργία του αντικειμένου StudentRecord και ταυτόχρονη προσθήκη στη λίστα - λέγεται και «ανώνυμο αντικείμενο» 25

Υλοποίηση - Κλάση Course II 20. public void assigngrades() { 21. System.out.println("Give grades for course " + this.tostring()); 22. Scanner input = new Scanner(System.in); 23. for (StudentRecord record: studentlist) { 24. System.out.println("Give grade for student + record.getstudent().getam() +":"); 25. double grade = input.nextdouble(); 26. record.setgrade(grade); 27. if (record.passed()){ 28. record.getstudent().addunits(units); 29. } 30. } 31. } 32. 33. public String tostring() { return name + " " + code + " " + "(" + units + ")"); } 34. 35. public void printinfo() { 36. System.out.println("Course " + name + " " + code + " " + "(" + units + ")"); 37. for (StudentRecord record: studentlist) { System.out.println(record); } 38. } διασχίζουμε τη λίστα των φοιτητών αλυσιδωτές κλήσεις μεθόδων: είναι εφικτές εφόσον μια μέθοδος επιστρέφει αντικείμενο 26

Υλοποίηση - Κλάση Department 1. public class Department { 2. public static void main(string args[]) { 3. int numofstudents = Integer.parseInt(args[0]); 4. Professor ekosmas = new Professor("Eleftherios Kosmas", 2012); 5. Professor kvasilak = new Professor("Kostas Vasilakis", 2013); 6. Course oop = new Course("oop", 212, 10); 7. Course intro = new Course("intro", 101, 5); 8. Student[] students = new Student[numOfStudents]; 9. Scanner input = new Scanner(System.in); 10. for (int i = 0; i < numofstudents; i ++){ 11. System.out.print("Give student name: "); 12. String name = input.next(); 13. students[i] = new Student(name, i); 14. } 15. oop.setprofessor(ekosmas); 16. oop.enroll(students[0]);oop.enroll(students[1]);oop.enroll(students[3]); 17. intro.setprofessor(kvasilak); 18. intro.enroll(students[2]); intro.enroll(students[3]); 19. oop.assigngrades(); intro.assigngrades(); 20. System.out.println(ekosmas); System.out.println(kvasilak); 21. oop.printinfo(); intro.printinfo(); 22. } 23. } 27

Σύνοψη UML διαγράμματα Σχέσεις κλάσεων σύνθεση συνάθροιση Ολοκληρωμένο παράδειγμα 28