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

Σχετικά έγγραφα
Προσομοίωση παρακολούθησης πληθυσμών αλεπούδων και κουνελιών

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

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

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

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

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 6: Φιλικές συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

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

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

Πληροφορική ΙΙ Θεματική Ενότητα 5

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Θεωρία Πιθανοτήτων & Στατιστική

Θεωρία Πιθανοτήτων & Στατιστική

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

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

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

Προγραμματισμός Διαδικτύου

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

14η ιάλεξη. Προχωρημένα θέματα σχεδίασης

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Συστήματα Αυτομάτου Ελέγχου. Ενότητα Α: Γραμμικά Συστήματα

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

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 5: Κληρονομικότητα. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

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

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

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

Δομές Δεδομένων. Ενότητα 1: Εισαγωγή-Υλοποίηση του ΑΤΔ Σύνολο με Πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

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

Δομημένος Προγραμματισμός

Τεχνολογίες & Εφαρμογές Πληροφορικής Ενότητα 1: Εισαγωγικό Μάθημα

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

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

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

Τεχνολογία Λογισμικού. Ενότητα 1: Εισαγωγή στην UML Καθηγητής Εφαρμογών Ηλίας Γουνόπουλος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

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

{ int a = 5; { int b = 7; a = b + 3;

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

Μαθησιακές δραστηριότητες με υπολογιστή

Διαδικαστικός Προγραμματισμός

Υπολογιστικά Συστήματα

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

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

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

Εισαγωγή στον Προγραμματισμό με C++

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

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

Θεωρία Πιθανοτήτων & Στατιστική

Στατιστική Επιχειρήσεων Ι

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

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

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

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

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

Υπολογιστικά Συστήματα

Προγραμματισμός Διαδικτύου

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

Συστήματα Γνώσης. Πρακτικό Κομμάτι Μαθήματος Πρόγραμμα Κίνησης Robot. Νίκος Βασιλειάδης, Αναπλ. Καθηγητής Τμήμα Πληροφορικής

Εφαρμογές Συστημάτων Γεωγραφικών Πληροφοριών

Περιεχόµενα. Βασικές αρχές αντικειµενοστρεφούς. Κεφάλαιο 1 Αντικείµενα και κλάσεις Κεφάλαιο 2 Κατανόηση των ορισµών κλάσεων...

ΒΟΗΘΗΤΙΚΕΣ ΣΗΜΕΙΩΣΕΙΣ

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

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

Υπολογιστικά Συστήματα

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

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

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

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

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών. Μανόλης Γ.Η.

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

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

Transcript:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 8: Περαιτέρω Τεχνικές Αφαίρεσης Γρηγόρης Τσουμάκας, Επικ. Καθηγητής

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Περαιτέρω Τεχνικές Αφαίρεσης

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Τα παραδείγματα κώδικα που χρησιμοποιούνται σε κάποιες από τις ακόλουθες διαφάνειες μπορούν να βρεθούν στον παρακάτω σύνδεσμο: http://users.auth.gr/greg/oop.zip

Βασικές Έννοιες Αφηρημένες κλάσεις. Διασυνδέσεις (Interfaces). Πολλαπλή κληρονομικότητα.

Προσομοίωση Χρήση λογισμικού για την προσομοίωση δραστηριοτήτων του πραγματικού κόσμου. Κίνηση σε πόλεις, καιρός, πολεμικά σενάρια, Απλουστευμένα σενάρια της πραγματικότητας. Πιο πολλές λεπτομέρειες = μεγαλύτερη ακρίβεια, αλλά και μεγαλύτερες υπολογιστικές απαιτήσεις. Πλεονεκτήματα. Χρήσιμες προβλέψεις (π.χ. καιρός). Ασφαλής, φθηνός και γρήγορος πειραματισμός.

Προσομοίωση Θηρευτής-Θήραμα Λεπτή ισορροπία μεταξύ ειδών. Πολύ θήραμα = πολύ φαγητό. Πολύ φαγητό = πολλοί θηρευτές. Πολλοί θηρευτές = λιγότερο φαγητό. Λιγότερο φαγητό =

To Λογισμικό FoxesAndRabbits

Βασικές Κλάσεις Ενδιαφέροντος Fox. Απλό μοντέλο ενός θηρευτή. Rabbit. Απλό μοντέλο ενός θηράματος. Simulator. Διαχειρίζεται την προσομοίωση. Διατηρεί δύο συλλογές από αντικείμενα των κλάσεων Fox και Rabbit αντίστοιχα.

Οι Υπόλοιπες Κλάσεις Field. Διδιάστατο πλέγμα. Location. Μια τοποθεσία σε διδιάστατο πλέγμα. SimulatorView. Οπτικοποίηση του πλέγματος. FieldStats, Counter Καταγραφή στατιστικών. Randomizer Κεντρική διαχείριση τυχαιότητας.

Παράδειγμα Οπτικοποίησης

Η Κατάσταση ενός Λαγού public class Rabbit { // Static fields omitted. private int age; private boolean alive; private Location location; private Field field;

Η Συμπεριφορά των Λαγών Υλοποιείται εντός της μεθόδου run. Αυξάνεται η ηλικία τους. Ένας λαγός πεθαίνει όταν ξεπεράσει ένα άνω όριο ηλικίας (βήματα προσομοίωσης), ΜΑΧ_AGE. Ενδέχεται να αναπαραχθούν. Με πιθανότητα (BREEDING_PROB), εφόσον έχουν ξεπεράσει ένα κάτω όριο ηλικίας (BREEDING_AGE). Ένας αριθμός νέων λαγών (ΜΑΧ_LITTER_SIZE) τοποθετούνται σε διπλανά κελιά. Μετακινούνται σε γειτονικά κελιά.

Απλουστεύσεις Μοντέλου Λαγών Δεν υπάρχουν διαφορετικά φύλα. Όλοι είναι θηλυκοί. Ο ίδιο λαγός ενδέχεται να αναπαραχθεί σε συνεχόμενα βήματα της προσομοίωσης. Όλοι οι λαγοί πεθαίνουν στην ίδια ηλικία.

Η Κατάσταση μιας Αλεπούς public class Fox { // Static fields omitted. private int age; private boolean alive; private Location location; private Field field; private int foodlevel;

Η Συμπεριφορά των Αλεπούδων Υλοποιείται στη μέθοδο hunt. Μεγαλώνουν και αναπαράγονται με τον ίδιο τρόπο όπως και οι λαγοί. Αυξάνεται η πείνα τους (RABBIT_FOOD_VALUE). Ψάχνουν στα γειτονικά κελιά για φαγητό.

Απλουστεύσεις στις Αλεπούδες Παρόμοιες απλουστεύσεις με τους λαγούς. Διαφορετικός τρόπος μοντελοποίησης της πείνας και του κυνηγιού θηραμάτων. Το επίπεδο φαγητού καλώς είναι αυξητικό; Είναι ίδια η πιθανότητα για κυνήγι μιας πεινασμένης και μιας χορτάτης αλεπούς; Είναι αποδεκτές αυτές οι απλουστεύσεις; Μόνο εφόσον βγαίνουν χρήσιμα συμπεράσματα.

Η Κλάση Simulator Kατασκευαστής και μέθοδος reset. Αρχικοποιούν μια προσομοίωση. Η μέθοδος populate. Γεμίζει τυχαία το πλέγμα με ζώα τυχαίας ηλικίας. Η μέθοδος simulateonestep. Διατρέχει τις δύο διαφορετικές συλλογές των ζώων και καλεί τις συμπεριφορές τους.

Ενημέρωση Προσομοίωσης (1/2) step++; ArrayList<Rabbit> newrabs = new ArrayList<>(); Iterator<Rabbit> it1 = rabbits.iterator(); while (it1.hasnext()) { Rabbit rabbit = it1.next(); rabbit.run(newrabs); if (!rabbit.isalive()) { it1.remove(); rabbits.addall(newrabs);

Ενημέρωση Προσομοίωσης (2/2) ArrayList<Rabbit> newfoxs = new ArrayList<>(); Iterator<Fox> it2 = foxes.iterator(); while (it2.hasnext()) { Fox fox = it2.next(); fox.hunt(newfoxs); if(! fox.isalive()) { it2.remove(); foxes.addall(newfoxs); view.showstatus(step, field);

Προβλήματα και Βελτιώσεις Προβλήματα. Οι κλάσεις Fox, Rabbit έχουν πολλες ομοιότητες. Η κλάση Simulator έχει υψηλή σύζευξη με τις κλάσεις Fox και Rabbit, και επανάληψη κώδικα. Βελτιώσεις;

Η Υπερκλάση Animal (1/2) Κοινά private πεδία στην Animal. age, alive, location, field. Το age σχετίζεται με static final πεδία (σταθερές), οπότε θα το εξετάσουμε αργότερα. Αρχικοποίηση. alive = true, location και field από κατασκευαστή. Νέα μέθοδος πρόσβασης. Νέα protected μέθοδος getfield για πρόβαση στο πεδίο field από τις run, hunt, givebirth, findfood.

Η Υπερκλάση Animal (2/2) Αλλαγές σε υπάρχουσες μεθόδους πρόσβασης και μετάλλαξης. Rabbit Fox Animal getlocation public public public setlocation private private protected isalive public public public setdead public private protected

Αλλαγές στη Simulator (1/2) ArrayList<Animal> newanims = new ArrayList<>(); Iterator<Animal> it = animals.iterator(); while (it.hasnext()) { Animal animal = it.next(); if (animal instanceof Rabbit) Rabbit rabbit = (Rabbit) animal; rabbit.run(newanims); else if (animal instanceof Fox){ Fox fox = (Fox) animal; fox.hunt(newanims); if (!animal.isalive()) { it.remove(); animals.addall(newanims);

Αλλαγές στη Simulator (2/2) Μείωση σύξευξης Simulator και Fox, Rabbit. Χρήση πολυμορφικής συλλογής με Animal. Μετονομασία μεθόδων run και hunt σε act. Iterator<Animal> it = animals.iterator(); while (it.hasnext()) { Animal animal = it.next(); animal.act(newanimals); if (!animal.isalive()) { it.remove();

Η Μέθοδος act Ο στατικός έλεγχος τύπου απαιτεί μέθοδο act στην κλάση Animal. Δεν υπάρχει προφανής κοινός κώδικας. Η αύξηση της ηλικίας εξαρτάται από στατικές σταθερές των επί μέρους κλάσεων! Δήλωση μεθόδου act ως αφηρημένης. public abstract void act(arraylist<animal> newanimals);

Αφηρημένες Κλάσεις και Μέθοδοι Αφηρημένες μέθοδοι. Περιλαμβάνουν στην αρχή τη λέξη κλειδί abstract. Δεν έχουν σώμα. Εφόσον υπάρχουν σε μια κλάση, τότε και η κλάση πρέπει να δηλωθεί ως αφηρημένη. Αφηρημένες κλάσεις. Στη δήλωση τους μπαίνει η λέξη κλειδί abstract. Δεν μπορούμε να έχουμε αντικείμενα τους. Δεν είναι υποχρεώτικό να έχουν αφηρημένες μεθόδους.

Χειρισμός του πεδίου age private int age; private static final int BREEDING_AGE = 5; // 15 fox public boolean canbreed() { return age >= BREEDING_AGE; Πριν (Rabbit) ---------------------------------------------------- protected int age; protected abstract int getbreedingage(); Μετά public boolean canbreed() { (Animal) return age >= getbreedingage(); ---------------------------------------------------- private static final int BREEDING_AGE = 5; // 15 fox public int getbreedingage() { Μετά return BREEDING_AGE; (Rabbit)

Περαιτέρω Αφαίρεση (1/3) Προσθήκη πρακτόρων που δεν είναι ζώα. Άνθρωποι που κυνηγούν τις αλεπούδες. Φυτά που αποτελούν τροφή για τους λαγούς. Καιρός που επηρεάζει την ανάπτυξη των φυτών. Πως θα γενικεύαμε την προσομοίωση; public abstract class Actor { public abstract void act(arraylist<actor> l); public abstract boolean isactive();

Περαιτέρω Αφαίρεση (2/3) Iterator<Animal> it = animals.iterator(); while (it.hasnext()) { Animal animal = it.next(); animal.act(newanimals); if (!animal.isalive()) { it.remove(); --------------------------------------------------------- Iterator<Actor> it = actors.iterator(); while (it.hasnext()) { Actor actor = it.next(); actor.act(newactors); if (!actor.isactive()) { it.remove(); Πριν Μετά

Περαιτέρω Αφαίρεση (3/3)

Πολλαπλή Κληρονομικότητα (1/3) Επιλεκτική εμφάνιση των πρακτόρων της προσομοίωσης.

Πολλαπλή Κληρονομικότητα (2/3) for (Actor actor : actors) { actor.act(newactors); view.showstatus(step, field); Τρέχουσα υλοποίηση ------------------------------------------- for (Actor actor : actors) { actor.act(newactors); Εναλλακτική υλοποίηση for (Drawable item : drawables) { item.draw();

Πολλαπλή Κληρονομικότητα (3/3) Πολλαπλή κληρονομικότητα. Μια κλάση επεκτείνει περισσότερες από μία. Κάθε γλώσσα έχει τους δικούς της κανόνες. Πως επιλύονται συγκρούσεις μεταξύ μεθόδων με ίδιες υπογραφές και διαφορετικές υλοποιήσεις; Η Java. Δεν το επιτρέπει για κλάσεις. Το επιτρέπει για διασυνδέσεις (interfaces), όπου δεν υπάρχουν συγκρουόμενες υλοποιήσεις.

Χαρακτηριστικά Διασυνδέσεων Όλες οι μέθοδοι είναι public και abstract. Δεν χρειάζεται να το καθορίσουμε. Δεν υπάρχουν κατασκευαστές. Τα πεδία είναι δημόσιες στατικές σταθερές. public interface Actor { void act(arraylist<actor> newactors); boolean isactive(); public interface Drawable { void draw();

Οι Κλάσεις Υλοποιούν Διασυνδέσεις public class Animal implements Actor {... public class Fox extends Animal implements Drawable {... public class Hunter implements Actor, Drawable {... public class Ant extends Animal {... public class Weather implements Actor {...

Διασυνδέσεις ως Τύποι Οι κλάσεις που υλοποιούν διασυνδέσεις. Δεν κληρονομούν κώδικά, αλλά Αποτελούν υποτύπο του τύπου της διασύνδεσης, άρα επιτρέπουν την αξιοποίηση πολυμορφισμού. Παράδειγμα. for (Actor actor : actors) { actor.act(newactors);

Διασυνδέσεις ως Προδιαγραφές Ισχυρός διαχωρισμός προσφερόμενων λειτουργιών και υλοποίησής τους. Καθορισμός τύπου παραμέτρων και επιστρεφόμενων τιμών. Αλληλεπίδραση ανεξάρτητη της υλοποίησης. Επιλογή ανάμεσα από εναλλακτικές υλοποιήσεις. Εύκολη αλλαγή από υλοποίηση σε υλοποίηση. Εύκολη υιοθέτηση νέων υλοποιήσεων.

Εναλλακτικές Υλοποιήσεις List<String> list = new ArrayList<>(); list.add("java"); for (String item : list) { System.out.println(item); TestLists.java

H Διασύνδεση Comparable<T> Ορίζει μέθοδο int compareto(t obj); Επιστρέφει αρνητικό, 0, ή θετικό ανάλογα αν το obj προηγείται, ισούται ή έπεται του τρέχοντος. Χρησιμοποιείται στο πλαίσιο συλλογών. Collections.sort() TreeSet, TreeMap TestComparable.java

Σύνοψη (1/2) Η κληρονομικότητα προσφέρει Επαναχρησιμοποίηση κώδικα μέσω αφηρημένων και μη αφηρημένων κλάσεων. Κοινούς τύπους για διαφορετικά αντικείμενα μέσω αφηρημένων και μη αφηρημένων κλάσεων, αλλλά και μέσω διασυνδέσεων.

Οι αφηρημένες κλάσεις Λειτουργούν ως ημιτελείς υπερκλάσεις. Οι αφηρημένες μέθοδοι επιτρέπουν στατικό έλεγχο τύπου χωρίς να απαιτούν υλοποίηση. Υποστηρίζουν τον πολυμορφισμό. Οι διασυνδέσεις Σύνοψη (2/2) Παρέχουν προδιαγραφές δίχως υλοποίηση. Υποστηρίζουν τον πολυμορφισμό. Υποστηρίζουν την πολλαπλή κληρονομικότητα.

Αφηρημένη Κλάση ή Διασύνδεση; Αν θα περιλαμβάνει υλοποιήσεις. Αφηρημένη κλάση. Αν δεν θα περιλαμβάνει υλοποιήσεις. Οι διασυνδέσεις είναι λιγότερο περιοριστικές, καθώς επιτρέπουν πολλαπλή κληρονομικότητα.

Άσκηση Τι λάθη εντοπίζετε στον ορισμό της ακόλουθης διασύνδεσης; public interface Monitor { private static final int THRESHOLD=50; public Monitor(int initial); public int getthreshold() { return THRESHOLD;

Άσκηση Έστω 4 μεταβλητές αντίστοιχων κλάσεων: Ο ο; X x; T t; M m; Οι παρακάτω αναθέσεις είναι αποδεκτές: m = t; m = x; o = t; Οι παρακάτω αναθέσεις ΔΕΝ είναι αποδεκτές: ο = m; o = x; x = o; Τι συμπεράσματα βγάζετε για τις σχέσεις των κλάσεων;

Άσκηση Έστω 5 μεταβλητές αντίστοιχων κλάσεων ή διασυνδέσεων: U u; G g; B b; Z z; X x; Οι παρακάτω αναθέσεις είναι αποδεκτές: u = z; x = b; g = u; x = u; Οι παρακάτω αναθέσεις ΔΕΝ είναι αποδεκτές: u = b; x = g; b = u; z = u; g = x; Τι συμπεράσμτα βγάζετε για τους τύπους και τις μεταξύ τους σχέσεις;

Άσκηση Έστω ότι υλοποιείτε ένα πληροφοριακό σύστημα διαχείρισης τμημάτων ΑΕΙ. Ορίστε ιεραρχία τύπων (διασυνδέσεις, κλάσεις, αφηρημένες κλάσεις) για τα άτομα των ΑΕΙ: Προσωπικό, φοιτητές, διδακτικό προσωπικό, υποστηρικτικό προσωπικό, βοηθοί μαθήματος (φοιτητές που διδάσκουν), τεχνικό υποστηρικτικό προσωπικό, φοιτητές τεχνικοί (φοιτητές που κάνουν τεχνική υποστήριξη).

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Τέλος Ενότητας Επεξεργασία: Εμμανουήλ Ρήγας Θεσσαλονίκη, Εαρινό Εξάμηνο 2013-2014