POINTERS, AGGREGATION, COMPOSITION

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

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

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

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

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

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

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

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

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

Δομές Δεδομένων (Data Structures)

Συλλογές, Στοίβες και Ουρές

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Προγραμματισμός Υπολογιστών με C++

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Στοίβες με Δυναμική Δέσμευση Μνήμης

Προγραμματισμός Ι. Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

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

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

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

Δομές Δεδομένων & Αλγόριθμοι

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

Δομές Δεδομένων και Αλγόριθμοι

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Βασικές Έννοιες Δοµών Δεδοµένων

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

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Προγραμματισμός Υπολογιστών με C++

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

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

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

ΠΡΟΤΥΠΑ. ΠΑΡΑ ΕΙΓΜΑ ηµιουργία πρότυπου στοίβας (stack) και στη συνέχεια δηµιουργία µιας στοίβας σηµείων.

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

ΠΛΗ111. Ανοιξη Μάθηµα 4 ο. Στοίβα. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Φροντιςτήριο. Linked-List

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

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

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

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

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

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

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

Διορθώσεις σελ

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

17TimeThis.h function returns reference pointer to same object { return *this; }

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

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

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

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

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

Προγραμματισμός Υπολογιστών με C++ Φύλλο Διαγωνίσματος Ακαδημαϊκό εξάμηνο: Χειμερινό

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

Προαπαιτούμενες Ασκήσεις 5 ου Εργαστηρίου. Dose stoixeio (integer) : 25 Found stoixeio in position 7 Dose stoixeio (integer) :94 Value not found

Τελεστές ΤΕΛΕΣΤΕΣ. Γεώργιος Παπαϊωάννου ( )

Διάλεξη 08: ΛίστεςΙΙ Κυκλικές Λίστες. Διδάσκων: Παναγιώτης Ανδρέου

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

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Πέρασμα παραμέτρων, συναρτήσεις δόμησης και αποδόμησης

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Βασικές Δομές Δεδομένων

Transcript:

POINTERS, AGGREGATION, COMPOSITION

POINTERS TO OBJECTS

Η κλάση mystring class mystring private: char *s; int size; public: mystring(const char *); ~mystring(); char *GetString(); int GetSize(); ; mystring::mystring(const char * x) size = strlen(x); s = new char[size +1]; strcpy(s,x); mystring::~mystring() delete [] s; char * mystring::getstring() return s; int mystring::getsize() return size;

Άσκηση Διάβασε από το αρχείο input.txt ένα άγνωστο αριθμό από ονόματα και τύπωσε αυτά που έχουν μέχρι 5 χαρακτήρες σε αντίθετη σειρά από αυτή που τα διάβασες. Αρχείο: θα χρησιμοποιήσουμε τις συναρτήσεις διαβάσματος που είδαμε στο προηγούμενο μάθημα. Ονόματα: θα τα αποθηκεύσουμε σε mystring. Εκτύπωση ονομάτων: πρέπει να τα αποθηκεύσουμε σε μια δυναμική δομή. Stack: αποθηκεύει σε last-in-first-out σειρά οπότε είναι ιδανική για τις ανάγκες μας.

Στοίβα head X Y Top(): Επιστρέφει την τιμή στην κορυφή της στοίβας (Χ στο παράδειγμα μας)

Στοίβα head X Y Pop(): Αφαιρεί το στοιχείο στην κορυφή της στοίβας και επιστρέφει την τιμή του (Χ στο παράδειγμα μας)

Στοίβα head Z X Y Push(Z): Προσθέτει την τιμή Z στην κορυφή της στοίβας

Στοίβα - Υλοποιηση head Z X Y Τα Χ,Υ,Ζ μπορεί να είναι δεδομένα οποιουδήποτε τύπου ή κλασης. Στην περίπτωση μας δείκτες σε mystring

Στοίβα - Υλοποιηση head Z X Y Τα Χ,Υ,Ζ μπορεί να είναι δεδομένα οποιουδήποτε τύπου ή κλασης. Στην περίπτωση μας δείκτες σε mystring Θα ορισουμε StackElement μια κλάση που κρατάει το κάθε στοιχείο της στοιβας.

Και μια κλάση Stack που υλοποιεί την στοίβα και όλες τις λειτουργίες της Στοίβα - Υλοποιηση head Z X Y Τα Χ,Υ,Ζ μπορεί να είναι δεδομένα οποιουδήποτε τύπου ή κλασης. Στην περίπτωση μας δείκτες σε mystring Θα ορισουμε StackElement μια κλάση που κρατάει το κάθε στοιχείο της στοιβας.

class StackElement private: mystring *data; StackElement *next; public: StackElement(myString *, StackElement *); StackElement *Next(); mystring *Data(); ; StackElement::StackElement(myString *s, StackElement *p) data = s; next = p; StackElement *StackElement::Next() return next; mystring *StackElement::Data() return data;

class Stack private: StackElement *head; int size; public: Stack(); ~Stack(); mystring *Pop(); mystring *Top(); void Push(myString *); int GetSize(); void Print(); bool IsEmpty(); ; Stack::Stack():head(NULL),size(0) mystring *Stack::Top() return head->data(); mystring *Stack::Pop() if (head == NULL) return NULL; mystring *s = head->data(); StackElement *temp = head; head = head->next(); delete temp; return s; void Stack::Push(myString *s) StackElement *newelement = new StackElement(s,head); head = newelement; int Stack::GetSize() return size; bool Stack::IsEmpty() if (head == NULL) return true; return false; void Stack::Print() StackElement *el = head; while (el!= NULL) cout << el->data()->getstring() << endl; el = el->next(); Stack::~Stack() StackElement *temp = head; while (head!= NULL) head = head->next(); delete temp; temp = head;

int main() ifstream fin("input.txt"); Stack *namestack = new Stack(); char s[100]; while (fin.getline(s,100)) cout << s << endl; mystring *sp = new mystring(s); if (sp->getsize() <=5) namestack->push(sp); namestack->print(); mystring *first = namestack->top(); // if we deleted the strings // in the destructor first could end up pointing nowhere //delete namestack; // Not a good idea since //we will not delete the strings while (!namestack->isempty()) mystring *sp = namestack->pop(); delete sp; fin.close();

O pointer this Ας υποθέσουμε ότι (για κάποιο λόγο) θέλουμε στο τελευταίο στοιχείο ο δείκτης next να δείχνει στον εαυτό του αντί για NULL. Μπορούμε να το κάνουμε αυτό χρησιμοποιώντας τον δείκτη this, που επιστρέφει ένα δείκτη στο αντικείμενο που τον χρησιμοποιεί. StackElement::StackElement(myString *s, StackElement *p) data = s; next = p; if (next == NULL) next = this

O pointer this Ο δείκτης this μπορεί να χρησιμοποιηθεί και σε άλλα σημεία για να κάνει τον κώδικα πιο ευανάγνωστο. Ο παρακάτω κώδικας είναι ισοδύναμος με τον προηγούμενο. StackElement::StackElement(myString *s, StackElement *p) this->data = s; this->next = p; if (next == NULL) this->next = this

AGGREGATION AND COMPOSITION

Σχέσεις μεταξύ κλάσεων Στο παράδειγμα με τη στοίβα έχουμε τρείς διαφορετικές κλάσεις (mystring, Stack, StackElement) οι οποίες συσχετίζονται μεταξύ τους με διαφορετικούς τρόπους. Υπάρχουν πολλές διαφορετικές σχέσεις μεταξύ κλάσεων. Στην περίπτωση μας, η μία κλάση ορίζεται χρησιμοποιώντας αντικείμενα της άλλης Αυτού του είδους τις σχέσεις τις χωρίζουμε σε δύο κατηγορίες: σχέσεις συνάθροισης (aggregation) σχέσεις σύνθεσης (composition)

Σχέση σύνθεσης Composition Η κλάση Χ έχει σχέση σύνθεσης με την κλάση Υ, αν το αντικείμενο της κλάσης Χ αποτελείται από αντικείμενο/α της κλάσης Υ. Τα αντικείμενα της κλάσης Υ δεν υπάρχουν εκτός της κλάσης Χ. Η κλάση Χ δημιουργεί και καταστρέφει τα αντικείμενα της κλάσης Υ. Τα αντικείμενα της κλάσης Υ μπορούν να υπάρχουν ως μεταβλητές μέσα στον ορισμό της Χ. Παραδείγματα: Ένας άνθρωπος αποτελείται από μέρη του σώματος: κεφάλι, πόδια, χέρια κλπ. Ένα κτήριο αποτελείται από τοίχους, δωμάτια, πόρτες, κλπ. Στην περίπτωση μας η κλάση Stack έχει σχέση σύνθεσης με την κλάση StackElement.

UML διάγραμμα H UML (Unified Modeling Language) είναι μια γλώσσα για να περιγράφουμε και να καταλαβαίνουμε τον κώδικα μας. Τα UML διαγράμματα παρέχουν μια οπτικοποίηση των σχέσεων μεταξύ των κλάσεων. Stack StackElement Οι σχέσεις σύνθεσης συμβολίζονται όπως φαίνεται.

Σχέση συνάθροισης Aggregation Η κλάση Χ έχει σχέση συνάθροισης με την κλάση Υ, αν αντικείμενο/α της κλάσης Υ ανήκουν στο αντικείμενο της κλάσης Χ. Τα αντικείμενα της κλάσης Υ έχουν υπόσταση και εκτός της κλάσης Χ. Όταν καταστρέφεται ένα αντικείμενο της κλάσης Χ δεν καταστρέφονται και τα αντικείμενα της κλάσης Υ. Το αντικείμενο της κλάσης Χ έχει δείκτες στα αντικείμενα της κλάσης Υ. Παραδείγματα: Σε έναν άνθρωπο μπορεί να ανήκει ένα αυτοκίνητο, ρούχα, κλπ. Ένα κτήριο μπορεί να έχει μέσα ανθρώπους, έπιπλα, κλπ. Στην περίπτωση μας η κλάση StackElement έχει σχέση συνάθροισης με την κλάση mystring.

UML διάγραμμα Οι σχέσεις συνάθροισης συμβολίζονται όπως φαίνεται. StackElement mystring

Όλο το UML διάγραμμα Stack StackElement mystring

Aggregation and Composition Το αν θα είναι μια σχέση, σχέση συναθροισης ή σύνθεσης εξαρτάται κατά πού και από την υλοποίηση μας και τον σχεδιασμό. Π.χ., σε ένα διαφορετικό πρόγραμμα μπορεί να επαναχρησιμοποιούμε το StackElement. Π.χ., σε μία διαφορετική εφαρμογή, τα ανθρώπινα όργανα υπάρχουν και χωρίς τον άνθρωπο.

ΈΝΑ ΜΕΓΑΛΟ ΠΑΡΑΔΕΙΓΜΑ

Άσκηση Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 10 φοιτητές οπού ο καθένας έχει ένα όνομα και ένα αριθμό μητρώου (ΑΜ), και 2 καθηγητές που ο καθένας έχει ένα όνομα και ένα ΑΦΜ. Το τμήμα δίνει 3 μαθήματα. Το κάθε μάθημα έχει κωδικό και όνομα. Το κάθε μάθημα ανατίθεται σε ένα καθηγητή. Οι φοιτητές μπορούν να γραφτούν σε κάποιο μάθημα και παίρνουν βαθμό. Θέλουμε να μπορούμε να τυπώσουμε τη λίστα των φοιτητών που παίρνουν το μάθημα και τους βαθμούς τους.

Άσκηση Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 5 φοιτητές οπού ο καθένας έχει ένα όνομα και ένα αριθμό μητρώου (ΑΜ). Το τμήμα έχει 2 καθηγητές που ο καθένας έχει ένα όνομα και ένα ΑΦΜ. Το τμήμα δίνει 3 μαθήματα. Το κάθε μάθημα έχει κωδικό και όνομα. Το κάθε μάθημα ανατίθεται σε ένα καθηγητή. Οι φοιτητές μπορούν να γραφτούν σε κάποιο μάθημα και παίρνουν βαθμό. Θέλουμε να μπορούμε να τυπώσουμε τις πληροφορίες του μαθήματος: το όνομα, τον καθηγητή και τη λίστα των φοιτητών που παίρνουν το μάθημα και τους βαθμούς τους.

Κλάσεις μέθοδοι και πεδία Ουσιαστικά: Τμήμα Φοιτητές Καθηγητές Μαθήματα Όνομα ΑΜ, ΑΦΜ, κωδικός Βαθμός Λίστα φοιτητών Τα ουσιαστικά είναι υποψήφια για κλάσεις ή πεδία Ρήματα: Ανατίθεται Εγγράφεται Τυπώνει Παίρνω βαθμό Τα ρήματα είναι υποψήφια για να γίνουν μέθοδοι και μηνύματα μεταξύ αντικειμένων.

Κλάσεις μέθοδοι και πεδία Ουσιαστικά: Τμήμα Φοιτητές Καθηγητές Μαθήματα Όνομα ΑΜ, ΑΦΜ, κωδικός Βαθμός Λίστα φοιτητών Τα ουσιαστικά είναι υποψήφια για κλάσεις ή πεδία Ρήματα: Ανατίθεται Εγγράφεται Τυπώνει Παίρνω βαθμό Τα ρήματα είναι υποψήφια για να γίνουν μέθοδοι και μηνύματα μεταξύ αντικειμένων. Όλα τα ουσιαστικά μπορούν να γίνουν κλάσεις αλλά συνήθως διαλέγουμε αυτά για τα οποία υπάρχει αρκετή πολυπλοκότητα

UML διάγραμμα. Department Student Course Professor

Μια παραλλαγή Department Student Course Professor Για τους φοιτητές κρατάμε μια λίστα με τα μαθήματα που έχουν πάρει, και για τους καθηγητές μια λίστα με τα μαθήματα που διδάσκουν.

Άσκηση Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 5 φοιτητές οπού ο καθένας έχει ένα όνομα και ένα αριθμό μητρώου (ΑΜ). Το τμήμα έχει 2 καθηγητές που ο καθένας έχει ένα όνομα και ένα ΑΦΜ. Το τμήμα δίνει 3 μαθήματα. Το κάθε μάθημα έχει κωδικό και όνομα. Το κάθε μάθημα ανατίθεται σε ένα καθηγητή. Οι φοιτητές μπορούν να γραφτούν σε κάποιο μάθημα και παίρνουν βαθμό. Ο κάθε φοιτητής έχει ένα αρχείο με τους βαθμούς των μαθημάτων που έχει περάσει. Θέλουμε να μπορούμε να τυπώσουμε τις πληροφορίες του μαθήματος: το όνομα, τον καθηγητή και τη λίστα των φοιτητών που παίρνουν το μάθημα και τους βαθμούς τους.

UML διάγραμμα. Department Student Course Professor Record

ΥΛΟΠΟΙΗΣΗ