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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΑΤΕΙ Θεσσαλονίκης Τμήμα Πληροφορικής

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

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

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

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

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

4 Συλλογές Αντικειμένων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

ΘΠ06 Μεταγλωττιστές. Εργασία Εξαμήνου: Υλοποίηση ενός Μεταγλωττιστή για τη Γλώσσα Floop2009

CSD Univ. of Crete Φθινόπωρο Άσκηση 1 Εκφώνηση

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

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

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

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

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

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

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

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

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

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

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

Δομές ελέγχου ροής προγράμματος

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

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

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

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

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

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

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

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

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

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

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

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

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

Κάποιες γενικές παρατηρήσεις:

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

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

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

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

Αντικειμενοστρέφεια. Ορισμοί αντικειμενοστρέφειας. Κάποιες γενικές παρατηρήσεις: Περιεχόμενα. Ποιοι είναι οι ορισμοί των παρακάτω;

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, 1908

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

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

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

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

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

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

Transcript:

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

Άλλες τεχνικές αφαίρεσης public class Fox { private static final int BREEDING_AGE = 10; private static final int MAX_AGE = 150; private static final double BREEDING_PROBABILITY = 0.09; private static final int MAX_LITTER_SIZE = 3; private static final int RABBIT_FOOD_VALUE = 4; private static final Random rand = new Random(); private int age; private boolean alive; private Location location; private int foodlevel; public Fox(boolean randomage) { age = 0; alive = true; if(randomage) { age = rand.nextint(max_age); foodlevel = rand.nextint(rabbit_food_value); else { // leave age at 0 foodlevel = RABBIT_FOOD_VALUE;

Άλλες τεχνικές αφαίρεσης public class Rabbit { private static final int BREEDING_AGE = 5; private static final int MAX_AGE = 50; private static final double BREEDING_PROBABILITY = 0.15; private static final int MAX_LITTER_SIZE = 5; private static final Random rand = new Random(); private int age; private boolean alive; private Location location; public void run(field updatedfield, List<Rabbit> newrabbits) {.... private void incrementage() {.... public Rabbit(boolean randomage) { age = 0; alive = true; if(randomage) { age = rand.nextint(max_age); private int breed() {...... private boolean canbreed() {..... public boolean isalive() {...... public void seteaten() {....... public void setlocation(int row, int col) {.... public void setlocation(location location) {....

Άλλες τεχνικές αφαίρεσης Οι κλάσεις Fox και Rabbit ορίζουν και οι δύο τα χαρακτηριστικά age, alive και location τα οποία μπορούν να μεταφερθούν σε μία νέα υπερκλάση Animal μαζί με τις μεθόδους isalive και setlocation. Με τη μετακίνηση των τριών χαρακτηριστικών στην κλάση Animal προκύπτει ποια πρέπει να είναι η ορατότητα τους. Η κλάση Rabbit ορίζει μια μέθοδο μετάλλαξης seteaten που χρησιμοποιείται από τη μέθοδο findfood της κλάσης Fox. Ωστόσο, τόσο η κλάση Fox όσο και ηκλάση Rabit χρειάζεται να θέτουν την τιμή false στο χαρακτηριστικό alive σε άλλα σημεία (μεθόδους incrementage). Μια λογική αλλαγή είναι να δώσουμε στη μέθοδο seteaten το γενικότερο όνομα setdead και να την τοποθετήσουμε στην κλάση Animal, έτσι ώστε να μπορούν να τη χρησιμοποιούν οι μέθοδοι βηματικής αύξησης.

Άλλες τεχνικές αφαίρεσης

Στην κλάση Simulator χρησιμοποιήθηκαν η διαφορετικοί τύποι λίστας για τις αλεπούδες και τα κουνέλια καθώς και κώδικας διάσχισης της κάθε λίστας. Τώρα που έχουμε την κλάση Animal μπορούμε να βελτιώσουμε τον κώδικα. Να συγχωνεύσουμε τις δύο συλλογές σε μία. for(iterator<animal> it = animals.iterator(); iterator(); it.hasnext(); ) { Animal animal = it.next(); if(animal instanceof (Rabbit)) { Rabbit rabbit = (Rabbit) animal; rabbit.run(updatedfield, newanimals); else if(animal instanceof Fox) { Fox fox = (Fox) animal; fox.hunt(field, updatefield, newanimals); else { System.out.println( found unknown animal ); if(!animal.isalive()) { it.remove();

Παρότι γνωρίζουμε ότι κάθε στοιχείο στη λίστα είναι ένα αντικείμενο τύπου Animal, πρέπει να καθορίσουμε τι τύπου ζώα είναι, προκειμένου να καλέσουμε τη σωστή μέθοδο ενέργειας για τον τύπο του. Ο τελεστής instanceof ελέγχει αν ένα δεδομένο αντικείμενο είναι, άμεσα ή έμεσα, στιγμιότυπο μιας δεδομένης κλάσης. Ο έλεγχος obj instanceof MyClass επιστρέφει την τιμή true αν ο δυναμικός τύπος της obj είναι MyClass ή οποιαδήποτε υποκλάση της MyClass. Έτσι όμως δεν αξιοποιούνται πλήρως οι δυνατότητες που προσφέρει η κληρονομικότητα.

Αν εξασφαλίσουμε ότι η υπερκλάση Animal έχει μια μέθοδο που επιτρέπει σε ένα ζώο να ενεργεί και ότι η μέθοδος αυτή ορίζεται εκ νέου σε κάθε υποκλάση, τότε μπορούμε να χρησιμοποιήσουμε μια πολυμορφική κλήση μεθόδου. for(iterator<animal> it = animals.iterator(); it.hasnext(); ) { Animal animal = it.next(); animal.act(field, updatedfield, newanimals); // Remove dead animals from the simulation. if(! animal.isalive()) { it.remove();

ΠΑΡΑΤΗΡΗΣΕΙΣ Υποθέτουμε ότι οι συγκεκριμένες μέθοδοι δράσης των ζώων (η run της κλάσης Rabbit και η hunt της κλάσης Fox) έχουν μετονομαστεί σε act. Η μέθοδος run της κλάσης Rabbit είχε μόνο δύο παραμέτρους, ρ την updatefield και τη newanimals. Τώρα έχουμε προσθέσει μια τρίτη παράμετρο, τη field, για να υπάρχει συνέπεια με τη μέθοδο act της κλάσης Fox. Ε δή δ ό ύ βλ ή ί ό Επειδή ο δυναμικός τύπος της μευαβλητής είναι αυτός που καθορίζει ποια μέθοδος εκτελείται τελικά, η μέθοδος ενέργειας των αλεπούδων θα εκτελείται για τις αλεπούδες, ενώ η αντίστοιχη μέθοδος θα εκτελείται για τα κουνέλια.

Αφού ο έλεγχος τύπων πραγματοποιείται με τη ηβοήθεια του στατικού τύπου, ο κώδικας θα μεταγλωττιστεί μόνον αν η κλάση Animal διαθέτει μια μέθοδο act με τη σωστή υπογραφή. Παρόλο όμως που κάθε ζώο μπορεί να εκτελέσει συγκεκριμένο σύνολο ενεργειών, δε μπορούμε να περιγράψουμε τις ενέργειες για τα ζώα γενικά. Οι εκάστοτε ενέργειες εξαρτώνται από το συγκεκριμένο υποτύπο. Το πρόβλημα απορρέει από το γεγονός ότι δεν πρόκειται να Το πρόβλημα απορρέει από το γεγονός ότι δεν πρόκειται να υπάρξει ποτέ κανένα στιγμιότυπο της κλάσης Animal.

Κλάσεις οι οποίες δεν προορίζονται ρ για τη δημιουργία αντικειμένων αλλά χρησιμοποιούνται μόνο ως υπερκλάσεις, είναι γνωστές ως αφηρημένες κλάσεις (abstract classes). Για την κλάση Animal lθέλουμε να δηλώσουμε ότι για κάθε ζώο υπάρχει μια μέθοδος act, αλλά δεν μπορούμε να δώσουμε μια λογική υλοποίηση αυτής της μεθόδου στην κλάση Animal. abstract public void act(field currentfield, Field updatedfield, dfi List<Animal> i newanimals); Η μέθοδος έχει ως πρόθεμα τη λέξη κλειδί abstract. Η μέθοδος δεν έχει σώμα. Η επικεφαλίδα της τερματίζεται με ένα ελληνικό ερωτηματικό.