(Απλή) Κληρονομικότητα



Σχετικά έγγραφα
ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

Η γλώσσα μοντελοποίησης UML. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 7

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

Η γλώσσα μοντελοποίησης UML. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών Φθινόπωρο οµική Μοντελοποίηση Class Diagrams

Φροντιστήριο 3. Ημερομηνία: 22/11/2006 Θεματική Ενότητα: Δομική Μοντελοποίηση Θέμα: Διαγράμματα Κλάσεων

Σύντομο Παράδειγμα μιας συνοπτικής μεθοδολογίας ανάπτυξης

Μοντέλα συστήματος. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 8

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

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

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

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

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

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

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

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

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

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

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

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

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

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

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

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

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

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

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

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

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

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

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

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

Ειδικά Θέματα Προγραμματισμού

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

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

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee

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

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

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

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

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

Θέματα εξετάσεων. Τύπος: B

Υπερφόρτωση τελεστών (operator(

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

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

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

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

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

Μάθημα 1 [3/11/2015].

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

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

ΑΣΚΗΣΕΙΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ (inheritance)

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

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

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

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

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

12. ΑΛΦΑΡΙΘΜΗΤΙΚΑ. υο είδη αλφαριθµητικών Τα αλφαριθµητικά της C πίνακες τύπου char Ta αντικείµενα της κλάσης string

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

Αναφορές, είκτες και Αλφαριθμητικά

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

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

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

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Τι είναι κλάση Κλάση

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

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

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

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

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

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

2 using namespace s t d ; 4 { 12 int t= x ; 6 x=y ; 7 y=t ; 8 } 9 11 { 13 x= y ; 14 y=t ; 15 } {

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

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

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

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

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

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

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

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

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

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

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

Δομές Δεδομένων Εισαγωγή παράγωγους τύπους δομών δεδομένων Ορισμός και συζήτηση της έννοιας μέλη ετικέτα Τρόπος δήλωσης και ορισμού

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

Transcript:

Πολλαπλή κληρονομικότητα, υςχετίςεισ μεταξύ κλάςεων ΟΝΣΟΚΕΝΣΡΙΚΟ ΠΡΟΓΡ/ΜΟ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) (Απλή) Κληρονομικότητα Student + calctuition(): double GraduateStudent + calctuition(): double 1

Στατική διαςύνδεςη Δυναμική διαςύνδεςη virtual 2

Αφηρημένεσ μέθοδοι και κλάςεισ AdminEmployee -salary: double -bonus: double +getsalary: double Employee -firstname: string -lastname: string +hire() +fire() +getsalary(): double TechEmployee -basesalary: double -ovthours: int -ovtrate: double +getsalary(): double class Employee { public: Employee(); ~Employee(); void hire(); void fire(); virtual double getsalary()=0; private: string firstname; string lastname; }; Πολλαπλή κληρονομικότητα 3

Πολλαπλή κληρονομικότητα Πολλαπλή κληρονομικότητα: Αςάφειεσ Πρζπει να το γράψουμε ζτςι Λφνεται το πρόβλθμα ΑΛΛΑ θ ςυνάρτθςθ fn() πρζπει να γνωρίηει ότι θ κλάςθ SleeperSofa κλθρονομεί το weight από δφο κλάςεισ και να ορίςει ποιο από τα δφο weight χρθςιμοποιεί. [Κακι αντικειμενοςτρεφισ ςχεδίαςθ] 4

Αςάφειεσ SleeperSofa ss(10); Στη μνήμη ιςοδυναμεί με 5

Πολλαπλή κληρονομικότητα: Αςάφειεσ Η κλάςη SleeperSofa χρειάζεται μόνο ένα αντίγραφο τησ Furniture και αυτό το ένα αντίγραφο να το μοιράζονται οι κλάςεισ Bed και Sofa Για να το πετύχουμε αυτό πρέπει να χρηςιμοποιήςουμε το keyword virtual Virtual inheritance 6

Virtual inheritance H κλάςη SleeperSofa κληρονομεί την Furniture, το μέροσ τησ Bed που δεν περιλαμβάνει τα ςτοιχεία τησ Furniture και το μέροσ τησ Sofa χωρίσ τα ςτοιχεία τησ Furniture Επιπλέον έχει και τα δικά τησ μέλη που ορίζει τοπικά Άλλεσ ςυςχετίςεισ μεταξύ κλάςεων Απλή ςυςχέτιςη, ςυναρμολόγηςη/ςυνάθροιςη, ςύνθεςη 7

Συςχετίςεισ απλήσ κατεύθυνςησ Account -number: int -balance: int -branch: string + calcinterest () : double + getbalance() : int Customer -lastname: string -firstname: string H κλάςη Account δεν αλλάζει (δεν γνωρίζει τα αντικείμενα τησ customer με τα οποία ςυνδέεται) την κλάςη Customer προςθέτουμε μια ιδιότητα τύπου δείκτησ ςε αντικείμενο Account Account* the_account; Και επιπλέον μεθόδουσ set_the_account() και get_the_account() Account* get_the_account () const { return the_acount; } set_the_account (Account* value) { the_account = value; } Συςχετίςεισ απλήσ κατεύθυνςησ με πολλαπλότητα Account +number: int #balance: int -branch: string #calcinterest () : double + getbalance() : int relatedaccount 1..6 1 Customer -lastname: string -firstname: string την κλάςη Customer προςθέτουμε μια ιδιότητα τύπου δείκτησ ςε αντικείμενο Account Account* related_account[6]; Και επιπλέον μεθόδουσ set_related_account() και get_related_account() Account * get_related_account ( int index) const { return related_acount[index]; } set_related_account (int index, Account* value) { related_account [index] = value; } 8

Συναρμολόγηςη (aggregation) Car -model: string -serialno: int 1 Engine -serialno: int -horsepower: int υναρμολόγηςη: Κάθε Αυτοκίνητο ΕΧΕΙ (HAS) μια Μηχανή Αλλά μια μηχανή μπορεί να ςυνεχίςει να υπάρχει και αφού διαγραφεί το αυτοκίνητο που ςυνδέεται με αυτή. την κλάςη Car προςθέτουμε μια ιδιότητα τύπου δείκτησ ςε αντικείμενο Engine Engine* my_engine; Και επιπλέον μεθόδουσ set_the_engine () και get_the_engine () Engine * get_the_engine () const { return my_engine; } set_the_engine ( Engine* value) { my_engine = value; } Σύνθεςη (composition) Car -model: string -serialno: int 1 Engine -serialno: int -horsepower: int ύνθεςη: Κάθε Αυτοκίνητο ΕΧΕΙ (HAS) μια Μηχανή Σο αντικείμενο Engine διαγράφεται αυτόματα όταν διαγραφεί το Car που ςυνδέεται με αυτό την κλάςη Car προςθέτουμε μια ιδιότητα τύπου Engine Engine my_engine; Και επιπλέον μεθόδουσ set_the_engine () και get_the_engine () Engine get_the_engine () const { return my_engine; } set_the_engine ( Engine value) { my_engine = value; } 9

Επιςτροφή ςτισ αςκήςεισ με την κλάςη Part Παράδειγμα ςυςχζτιςθσ αντικειμζνων διαφορετικϊν κλάςων Αντικείμενα ωσ μέλη κλάςεων Άςκηςη (class7.cpp) υνεχίςτε την υλοποίηςη τησ κλάςησ part. Να δημιουργηθεί μια νέα κλάςη Date τησ οποίασ τα αντικείμενα να αναπαριςτούν ημερομηνίεσ. Σα δεδομένα που χαρακτηρίζουν μια ημερομηνία είναι ο μήνασ, η μέρα και ο χρόνοσ. Να δημιουργηθεί νέο ιδιωτικό μέλοσ τησ κλάςησ part το οποίο να είναι τύπου Date και θα εκφράζει πότε έφταςε ςτην εταιρία το ςυγκεκριμένο ανταλλακτικό (arrival_date) και να γίνουν οι απαραίτητεσ αλλαγέσ ςτισ ςυναρτήςεισ constructors και ςτη ςυνάρτηςη show_part για το χειριςμό του. Να δημιουργηθεί ένα αντικείμενο τύπου Date με όνομα d το οποίο θα αναπαριςτά μια ημερομηνία δίνοντασ τιμέσ ςτα δεδομένα του (month=5,day=11,year=2015). Να δημιουργηθεί ένα αντικείμενο τύπου part με όνομα gear το οποίο θα αναπαριςτά μια ταχύτητα δίνοντασ τιμέσ ςτα δεδομένα του (modelnumber=2020,partnumber=2025, cost=300.0,company=2,arrival_date=11/5/2015 δηλαδή arrival_day=d). Εκτύπωςη τιμών δεδομένων αντικειμένου gear. Να δημιουργηθεί ένα αντικείμενο τύπου part με όνομα door. Εκτύπωςη τιμών δεδομένων αντικειμένου door. 10