ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Σχετικά έγγραφα
Οντοκεντρικός Προγραμματισμός

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

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

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

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

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

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

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

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

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

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

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

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

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

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

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

Προγράμματα με δομή Κληρονομικότητας

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

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

Προγράμματα με δομή Κληρονομικότητας

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

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

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

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

(Διαφάνειες Νίκου Βιδάκη)

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 9: Κληρονομικότητα (Inheritance)

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

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

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

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

Βάσεις Δεδομένων Ι. 4 ο Φροντιστήριο. Πέρδικα Πολίνα [perdika]

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

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

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

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

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

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

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

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

Εξαιρέσεις. try, catch, finally, throw, throws

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

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

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

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

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

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

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

Γενικά (για τις γραπτές εξετάσεις)

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

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

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

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


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

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

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

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

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

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

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Certified Java Programmer (CJP)

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

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

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

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

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

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

Κλάσεις στην Python. Δημιουργία κλάσεων

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

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

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

Προγραµµατισµός ΙΙ Java 2

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

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

Υπερφόρτωση Μεθόδων και Πέρασμα Ορισμάτων

Transcript:

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Μηχανισµός υλοποίησης των σχέσεων γενίκευσης/εξειδίκευσης µεταξύ κλάσεων Η σχέση εξειδίκευσης «υποκλάση-της» (subclass-of)είναι γνωστή σαν σχέση «είναι ένα» (isa) ή «είναι ένα είδος» (ako: a kind of) Σχετίζεται µε τη σχεδίαση του προγράµµατος Πλεονέκτηµα: αύξηση επαναχρησιµοποίησης

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Μια κλάση είναι υποκλάση µιας µόνο κλάσης Η κλάση (υποκλάση) κληρονοµεί µεταβλητές και µεθόδους από την (άµεση) υπερκλάση της και τις (έµµεσες) υπερκλάσεις αυτής Η ιεραρχία/δέντρο κλάσεων ονοµάζεται και ιεραρχία/δέντρο κληρονοµικότητας. Η ρίζα του δέντρου ονοµάζεται βασική κλάση (base class) Σ ένα πρόγραµµα συνήθως έχουµε περισσότερες από µια βασικές κλάσεις, εποµένως και δέντρα κληρονοµικότητας Όλες οι βασικές κλάσεις είναι υποκλάσεις της κλάσης Object

ΠΑΡΑ ΕΙΓΜΑ Object Shape Βασική κλάση Rectangle Ellipse Triangle Object Circle Shape Rectangle Ellipse Triangle Circle

ΠΡΟΣΘΗΚΗ ΝΕΑΣ ΚΛΑΣΗΣ:ΧΩΡΙΣ ΑΝΑ ΟΜΗΣΗ ΙΕΡΑΡΧΙΑΣ A Α,Κ +B,C +D +K +E +F

ΠΡΟΣΘΗΚΗ ΝΕΑΣ ΚΛΑΣΗΣ:ΜΕ ΑΝΑ ΟΜΗΣΗ ΙΕΡΑΡΧΙΑΣ (1) A Α, Β, Κ +B,C +D +Β,Κ +E +F

ΠΡΟΣΘΗΚΗ ΝΕΑΣ ΚΛΑΣΗΣ:ΜΕ ΑΝΑ ΟΜΗΣΗ ΙΕΡΑΡΧΙΑΣ (2) A +B +D +C +K +E +F

ΗΛΩΣΕΙΣ ΣΧΕΣΕΩΝ ΙΕΡΑΡΧΙΑΣ <προσδ. κλάσης> class <όνοµα κλασης> [extends <όνοµα κλάσης>] { <δηλώσεις µεταβλητών> <δήλωσεις δηµιουργών> <δηλώσεις µεθόδων> } υπερκλάση

ΠΑΡΑ ΕΙΓΜΑ public class Circle { protected double x, y, r ; public Circle (double x, double y, double r, ) {this.x=x; this.y=y; this.r = r ;} public double area ( ) {return 3.1416*r*r ;} } public class GraphicCircle extends Circle{ Color outline, fill ; public void draw ( ) { } }

ΠΟΛΥΜΟΡΦΙΣΜΟΣ Το γεγονός ότι ο αποστολέας ενός µηνύµατος δεν χρειάζεται να γνωρίζει την κλάση του παραλήπτη (στιγµιοτύπου) Το γεγονός ότι µια λειτουργία µπορεί να υλοποιηθεί µε το ίδιο όνοµα αλλά µε διαφορετικό περιεχόµενο (τρόπο λειτουργίας) σε διαφορετικές κλάσεις.

ΥΠΕΡΦΟΡΤΩΣΗ-ΥΠΕΡΚΑΛΥΨΗ ΜΕΘΟ ΩΝ Είναι δυνατή η ύπαρξη µεθόδων µε το ίδιο όνοµα, αλλά διαφορετικά ορίσµατα (είτε ως προς τον τύπο είτε ως προς τον αριθµό) στην ίδια ή διαφορετική κλάση (υπερφόρτωση µεθόδων-method overloading). Κάθε µέθοδος (µεταβλητή) χαµηλότερα στην ιεραρχία υπερκαλύπτει (επισκιάζει) κάθε ίδια µέθοδο (µεταβλητή) που βρίσκεται υψηλότερα στην ιεραρχία (method overriding/variable shadowing).

ΑΦΗΡΗΜΕΝΕΣ Ή ΑΦΑΙΡΕΤΙΚΕΣ ΚΛΑΣΕΙΣ Κλάσεις που χρειάζονται στο σχεδιασµό (κυρίως στα ανώτερα επίπεδα ιεραρχίας), αλλά δεν αναφέρονται σε πραγµατικά στιγµιότυπα/οντότητες Μια αφαιρετική κλάση περιέχει τουλάχιστον µια αφαιρετική µέθοδο (δηλ. µέθοδο χωρίς σώµα) Η απόγονος µιας αφαιρετικής κλάσης δεν είναι αφαιρετική αν ορίζει τα σώµατα όλων των αφαιρετικών µεθόδων της προγόνου της

ΠΑΡΑ ΕΙΓΜΑ abstract class Shape {} class Rectangle extends Shape {} class Ellipse extends Shape {} class Triangle extends Shape {} class Circle extends Ellipse {} abstract class Shape { public abstract double area(); public abstract double circumference(); }

ΠΟΛΛΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Μια κλάση είναι υποκλάση περισσότερων της µιας κλάσης Μια κλάση (υποκλάση) κληρονοµεί µεταβλητές και µεθόδους ταυτόχρονα από όλες τις υπερκλάσεις της (άµεσες και έµµεσες) Η Java δεν υποστηρίζει πολλαπλή κληρονοµικότητα µε άµεσο τρόπο (µόνο έµµεσα, µέσω των διεπαφών)

ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΑΙ ΗΜΙΟΥΡΓΟΙ public class GraphicCircle extends Circle{ Color outline, fill ; public GraphicCircle (double x, double y, double r, Color outline, Color fill) { this.x = x; this.y=y; this.r=r; this.outline=outline; this.fill=fill;} public class GraphicCircle extends Circle{ Color outline, fill ; public GraphicCircle (double x, double y, double r, Color outline, Color fill) { super(x, y, r); this.outline=outline; this.fill=fill;}

ΛΕΞΗ-ΚΛΕΙ Ι SUPER (1) Σε κάθε δηµιουργό εισάγεται από το σύστηµα σαν πρώτη πρόταση στο σώµα του η πρόταση super();, εφ όσον δεν υπάρχει άλλη πρόταση super. Η πρόταση super(); καλεί τον εξ ορισµού δηµιουργό της (άµεσης)υπερκλάσης της κλάσης του δηµιουργού και µετά εκτελείται το (υπόλοιπο) σώµα του δηµιουργού. Η κλήση του εξ ορισµού δηµιουργού δεν έχει κανένα ουσιαστικό αποτέλεσµα και δεν µας απασχολεί, εκτός αν έχουµε ορίσει εµείς δηµιουργό χωρίς ορίσµατα στην υπερκλάση, οπότε καλείται αυτός.

ΠΑΡΑ ΕΙΓΜΑ class Parent{ public Parent () { System.out.println ( Hello Parent );}} class Child extends Parent { String message = No Child ; public Child (String message) { this.message = message; System.out.println (message);}} Τι αποτέλεσµα θα έχει η Child c = new Child( First Child ); 1. Εκτύπωση: Hello Parent (λόγω έµµεσου super();) 2. Ανάθεση: First Child στην message του c (λόγω ) 3. Εκτύπωση: First Child (λόγω )

ΛΕΞΗ-ΚΛΕΙ Ι SUPER (2) Η χρήση της super δεν αφορά µόνο τους δηµιουργούς, αλλά και τις µεθόδους Μέσω της super µπορούµε να καλέσουµε απ ευθείας µια µέθοδο της υπερκλάσης µιας κλάσης: super.<όνοµα-µεθόδου> (<παράµετροι>); Επίσης, µπορούµε να καλέσουµε απ ευθείας µια µεταβλητή της υπερκλάσης: super.<όνοµα-µεταβλητής>; Η δυνατότητα αυτή µπορεί να χρησιµοποιηθεί για να καλέσουµε επικαλυπτόµενες µεθόδους ή µεταβλητές.

ΠΑΡΑ ΕΙΓΜΑ class A{ public int x=1; public int f1( ) {return x;}} class B extends A { public int x; επικάλυψη της public int f1( ){ x=2*super.x; επικάλυψη της return (super.f1( )+x);}} της Α (χρήση επικαλυπτόµενης µεθόδου στο σώµα της επικαλύπτουσας)