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

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

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

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

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

Προσομοίωση παρακολούθησης πληθυσμών αλεπούδων και κουνελιών

Κληρονοµικότητα. Συλλογή από CD και Βίντεο. ιάγραµµα Αντικειµένων. ιάγραµµα Κλάσεων. ΗΠρώτηΑπόπειρα: οπυρήνας

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Βασικά Στοιχεία της Java

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

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

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

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

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

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

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

Βασικά Στοιχεία της Java

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

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Τύποι δεδομένων, τελεστές, μεταβλητές

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

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

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

Ανάπτυξη Plugins για το AgentSheets

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

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

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

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

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

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

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

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

Επέκταση ιεραρχίας με νέες κλάσεις

Επέκταση ιεραρχίας με νέες κλάσεις Οι κλάσεις που δεν προορίζονται για δημιουργία στιγμιοτύπων, αλλά προορίζονται να χρησιμοποιηθούν αποκλειστικά ως υπερκλάσεις για άλλες κλάσεις ονομάζονται αφηρημένες κλάσεις (abstract classes).

ΗκλάσηDatabase Πριν την κληρονομικότητα public class Database private ArrayList<CD> cds; private ArrayList<DVD> dvds; public Database() cds = new ArrayList<CD>(); dvds = new ArrayList<DVD>(); public void list() // print list of CDs for(cd cd : cds) cd.print(); System.out.println(); public void addcd(cd thecd) cds.add(thecd); public void adddvd(dvd thedvd) dvds.add(thedvd); // print list of DVDs for(dvd dvd : dvds) dvd.print(); System.out.println();

ΗκλάσηDatabase Μετά public class Database private ArrayList<Item> items; public Database() items = new ArrayList<Item>(); public void additem(item theitem) items.add(theitem); public void list() for(item item : items) item.print(); System.out.println();

Υποκλάσεις και υποτύποι Εντολές ανάθεσης Car mycar = new Car(); Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle(); Car c1 = new Vehicle(); // αυτό είναι λάθος!

Υποκλάσεις και υποτύποι Πολυμορφικές μεταβλητές Οι μεταβλητές που αποθηκεύουν τύπους αντικειμένων στη Java ονομάζονται πολυμορφικές. Ο όρος αναφέρεται στο γεγονός ότι μια μεταβλητή μπορεί να αποθηκεύει αντικείμενα διαφορετικών τύπων (δηλ. του δηλωμένου τύπου ή οποιουδήποτε υποτύπου αυτού) for(item item : items) item.print(); System.out.println();

Υποκλάσεις και υποτύποι Προσαρμογή ρμ τύπου Ορισμένες φορές ο κανόνας ότι δε μπορούμε να κάνουμε ανάθεση μιας μεταβλητής ενός υπερτύπου σε έναν υποτύπο μας περιορίζει περισσότερο από ότι χρειάζεται. Vehicle v; Car c = new Car(); v = c; //σωστό c = v; // λάθος Vehicle v; Car c = new Car(); v = c; //σωστό c = (Car) v; // σωστό τελεστής προσαρμογής ής ρ ρμ γής τύπου

Υποκλάσεις και υποτύποι Προσαρμογή τύπου Vehicle v; Car c; Bicycle b; c = new Car(); v = c; //σωστό b = (Bicycle) c; //σφάλμα μεταγλώττισης b = (Bicycle) v; //σφάλμα χρόνου εκτέλεσης Οι τύποι Car και Bicycle δεν έχουν σχέση υποτύπου/υπερτύπου. Η προσαρμογή τύπου πρέπει να αποφεύγεται ρ ρμ γή ρ φ γ οποτεδήποτε είναι δυνατό γιατί μπορεί να οδηγήσει σε σφάλματα εκτέλεσης.

ΗκλάσηObject Όλες οι κλάσεις έχουν μια υπερκλάση, είτε αυτή δηλώνεται είτε δε δηλώνονται ως υποκλάσεις. Η κλάση Object είναι κλάση της πρότυπης βιβλιοθήκης της Java η οποία λειτουργεί ως υπερκλάση για όλα τα αντικείμενα. public class Person... public class Person extends Object... Η ύπαρξη κοινής υπερκλάσης για όλα τα αντικείμενα εξυπηρετεί δύο σκοπούς: Μπορούμε να δηλώσουμε πολυμορφικές μεταβλητές τύπου Object που μπορούν να περιέχουν οποιοδήποτε αντικείμενο (δε χρησιμοποιείται συχνά) Η κλάση Object ορίζει κάποιες μεθόδους οι οποίες στη συνέχεια είναι αυτόματα διαθέσιμες σε κάθε αντικείμενο.

ΗκλάσηObject............

Αυτόματη πλαισίωση & κλάσεις περιτύλιξης Οι τιμές των απλών τύπων (π.χ. int, boolean) δεν είναι αντικείμενα και άρα δε κληρονομούν από την κλάση Object. Άρα δεν είναι δυνατό να τους προσθέσουμε σε μια συλλογή. Τι γίνεται αν θέλουμε να δημιουργήσουμε μια λίστα ακεραίων; xρησιμοποιούμε κλάση περιτύλιξης (wrapper class), π.χ. η κλάση περιτύλιξης του τύπου int λέγεται Integer

Αυτόματη πλαισίωση & κλάσεις περιτύλιξης Ρητή ηήπεριτύλιξη: Integer iwrap = new Integer(ix); έτσι ώστε η iwrap να μπορεί να αποθηκευτεί σε μια συλλογή ArrayList<Integer> Αυτόματη πλαισίωση (autoboxing): οποτεδήποτε χρησιμοποιείται μια τιμή ενός θεμελιώδους τύπου σε μια κατάσταση που απαιτεί τύπο αντικειμένου, ο μεταγλωττιστής περιτυλίγει αυτόματα την τιμή του θεμελιώδους τύπου σε ένα κατάλληλο αντικείμενο περιτύλιξης: private ArrayList<Integer> marklist;... public void storemarkinlist(int mark) marklist.add(mark);

Αυτόματη πλαισίωση & κλάσεις περιτύλιξης Η αντίστροφη διαδικασία (αποπλαισίωση) εκτελείται και αυτή αυτόματα: int firstmark = marklist.remove(0); remove(0); Η αυτόματη πλαισίωση εφαρμόζεται επίσης οποτεδήποτε μια τιμή θεμελιώδους τύπου μεταβιβάζεται ως παράμετρος σε μια μέθοδο που αναμένει τύπο περιτύλιξης και όταν μια τιμή ενός θεμελιώδους τύπου αποθηκεύεται σε μια μεταβλητή ενός τύπου περιτύλιξης. Αντίστοιχα και η αποπλαισίωση.