ΠΡΟΧΩΡΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Χειμερινό Εξάμηνο 2018-2019 Τμήμα Ηλεκτρολόγων Μηχανικών Τ.Ε. 2 ο Σετ Ασκήσεων παράδοση έως: Παρασκευή 11 Ιανουαρίου 2019 ΔΙΑΒΑΣΤΕ ΠΡΟΣΕΧΤΙΚΑ ΤΙΣ ΠΑΡΑΤΗΡΗΣΕΙΣ/ΟΔΗΓΙΕΣ! που περιγράφονται στο τέλος του τρέχοντος σετ ασκήσεων. Μη επαρκής τήρηση των συγκεκριμένων οδηγιών θα επηρεάσει (αρνητικά) τη βαθμολόγηση του σετ ασκήσεων. 1 η Άσκηση (40%) Αναπτύξτε ένα πρόγραμμα σε Java (ως project του NetBeans) το οποίο θα διαχειρίζεται επιβάτες σε αεροπορικές πτήσεις. Υλοποιήστε τις παρακάτω δύο κλάσεις: 1. Flight: κρατάει πληροφορίες για μία πτήση. έχει πεδία την αφετηρία, τον προορισμό της πτήσης και μία λίστα (ArrayList) με τους επιβάτες (Passenger) της πτήσης. η αφετηρία και ο προορισμός αρχικοποιούνται στον constructor. υλοποιήστε τη μέθοδο addpassenger, η οποία παίρνει ως όρισμα ένα επιβάτη και τον προσθέτει στη λίστα επιβατών. υλοποιήστε τη μέθοδο removepassenger, η οποία παίρνει ως όρισμα έναν επιβάτη και τον αφαιρεί από τη λίστα επιβατών. υλοποιήστε τη μέθοδο tostring, η οποία επιστρέφει ένα String με την αφετηρία, τον προορισμό και τη λίστα επιβατών. 2. Passenger: κρατάει πληροφορίες για ένα επιβάτη. έχει πεδία το νούμερο του διαβατηρίου του επιβάτη, και την πτήση (Flight) στην οποία ταξιδεύει (είναι null αν δεν ταξιδεύει). τo νούμερο του διαβατηρίου αρχικοποιείται στον constructor. υλοποιήστε τη μέθοδο board, η οποία παίρνει ως όρισμα μια πτήση (Flight) και προσθέτει τον επιβάτη στην πτήση αυτή, μόνο εάν δε συμμετέχει ήδη σε κάποια πτήση. Τετάρτη, 26 Δεκέμβρη 2018 2 ο Σετ Ασκήσεων 1
υλοποιήστε τη μέθοδο disembark, η οποία, εφόσον ο επιβάτης συμμετέχει σε κάποια πτήση, τον αφαιρεί από την πτήση αυτή. υλοποιήστε τη μέθοδο connect, η οποία παίρνει ως όρισμα μια πτήση (Flight) και μεταφέρει τον επιβάτη από την πτήση στην οποία βρίσκεται στη νέα πτήση. Για να γίνει η σύνδεση θα πρέπει ο επιβάτης να είναι σε μία πτήση και ο προορισμός της τρέχουσας πτήσης να είναι ίδιος με την αφετηρία της νέας πτήσης. παρατηρήστε ότι η υλοποίηση των παραπάνω μεθόδων απαιτεί την κατάλληλη ενημέρωση πληροφοριών που διατηρούνται σε αντικείμενα και των δύο κλάσεων (Flight και Passenger). Μάλιστα την περίπτωση της connect, θα πρέπει να ενημερωθούν δύο αντικείμενα της κλάσης Flight. Σας δίνεται μία κλάση FlightTest η οποία περιέχει την main. Η έξοδος του προγράμματος, χωρίς τον κώδικα σε σχόλια, θα πρέπει να είναι: Passenger 1 Flight:NYC-SFO Passenger 3 Η έξοδος του προγράμματος, συμπεριλαμβανομένου του κώδικα σε σχόλια, θα πρέπει να είναι: Passenger 1 Flight:NYC-SFO Passenger 3 2 η Άσκηση (60%) Ο στόχος της άσκησης είναι να εξασκηθείτε με την κληρονομικότητα. Αναπτύξτε ένα πρόγραμμα σε Java (ως project του NetBeans) το οποίο θα υλοποιεί ένα σύστημα κοινωνικής δικτύωσης (ΣΚΔ), π.χ. Facebook. 1. κλάση Post: κρατάει πληροφορία για μία ανάρτηση (post) στο ΣΚΔ. i. έχει τα εξής πεδία: i. username (τύπου String), το οποίο κρατάει το όνομα του χρήστη, ii. text (τύπου String), το οποίο κρατάει το κείμενο της ανάρτησης, και Τετάρτη, 26 Δεκέμβρη 2018 2 ο Σετ Ασκήσεων 2
iii. shares, το οποίο κρατάει τον αριθμό των φορών που έχει αναμεταδοθεί (share) η ανάρτηση. ii. ο constructor αρχικοποιεί το όνομα του χρήστη και το κείμενο. iii. υλοποιήστε τη μέθοδο tostring, η οποία επιστρέφει ένα String με το όνομα και το κείμενο. iv. υλοποιήστε τη μέθοδο display, η οποία τυπώνει το αποτέλεσμα της tostring και τον αριθμό των αναμεταδόσεων. v. υλοποιήστε επίσης accessor και mutator μεθόδους για το πεδίο shares. 2. κλάση VideoPost: παράγεται (κληρονομεί) από την κλάση Post και κρατάει πληροφορία για ένα post το οποίο περιέχει και ένα βίντεο. Η κλάση έχει το πεδίο video (τύπου String) το οποίο κρατάει το όνομα του αρχείου με το βίντεο. Ο constructor παίρνει σαν ορίσματα το όνομα του χρήστη, το κείμενο και το όνομα του αρχείου. Υπερβείτε (override) τη μέθοδο tostring() ώστε να επιστρέφει και το όνομα του αρχείου του βίντεο. 3. κλάση SharedPost: παράγεται (κληρονομεί) από την κλάση Post και κρατάει πληροφορία για ένα post το οποίο αναμεταδίδεται (shared) από ένα μία άλλη ανάρτηση (Post). Η κλάση έχει το πεδίο original τύπου Post το οποίο είναι η αρχική ανάρτηση η οποία αναμεταδόθηκε. Ο constructor παίρνει ως ορίσματα το όνομα του χρήστη, το κείμενο και το την αρχική ανάρτηση. Ορίστε επίσης ένα constructor ο οποίος παίρνει ως όρισμα μόνο το όνομα του χρήστη και το αρχικό post και αρχικοποιεί το κείμενο στο κενό String. Όταν δημιουργείται το αντικείμενο θα πρέπει να ενημερώνεται και ο αριθμός των αναμεταδόσεων (shares) της αρχικής ανάρτησης (Post). Υπερβείτε (override) την μέθοδο tostring() ώστε να επιστρέφει και το περιεχόμενο της αρχικής ανάρτησης με τη λέξη Shared: μπροστά. 4. κλάση Facebook: η οποία θα περιέχει τη main καθώς και τη μέθοδο displayposts η οποία παίρνει σαν όρισμα ένα ArrayList από αναρτήσεις (Post) και τις εμφανίζει. Αρχικά, η main δημιουργεί ένα ArrayList από αναρτήσεις (Post) στο οποίο θα προσθέσει τέσσερις αναρτήσεις: i. μία ανάρτηση (Post) από το χρήστη Ellen, με κείμενο Hello World!, ii. μία ανάρτηση με βίντεο (VideoPost) από το χρήστη Frank, με κείμενο Funny! και όνομα αρχείου βίντεο Cat video, iii. μία αναμετάδοση (SharedPost) της δεύτερης ανάρτησης από το χρήστη George με κείμενο LOL!, και Τετάρτη, 26 Δεκέμβρη 2018 2 ο Σετ Ασκήσεων 3
iv. μία αναμετάδοση (SharedPost) της δεύτερης ανάρτησης από το χρήστη Henry χωρίς κείμενο. Έπειτα η main καλεί τη μέθοδο displayposts για να εμφανίσει τη λίστα των αναρτήσεων. Σημείωση: Όλα τα πεδία σε όλες τις κλάσεις θα πρέπει να ορίζονται private. Το αποτέλεσμα θα πρέπει να μοιάζει ως εξής: Ellen:Hello World! Frank:Funny!, video:cat video 2 shares George:LOL! Shared: Frank:Funny!, video:cat video Henry: Shared: Frank:Funny!, video:cat video Παρατηρήσεις: 1. ΔΙΑΒΑΣΤΕ ΠΡΟΣΕΧΤΙΚΑ ΤΙΣ ΠΑΡΑΚΑΤΩ ΠΑΡΑΤΗΡΗΣΕΙΣ/ΟΔΗΓΙΕΣ! Μη επαρκής τήρηση των παρακάτω οδηγιών θα επηρεάσει (αρνητικά) τη βαθμολόγηση του σετ ασκήσεων. 2. Το σετ ασκήσεων είναι ατομικό. Ανατρέξτε στην 1 η διάλεξη του μαθήματος ("Γνωριμία με το μάθημα") εάν απορείτε για το τι αυτό μπορεί να σημαίνει. 3. Για την καταχώρηση της τελικής σας βαθμολογίας θα πρέπει απαραίτητα να εξεταστείτε προφορικά για το τρέχον σετ ασκήσεων. 4. Τις απαντήσεις σας για το σετ ασκήσεων θα πρέπει να τις παραδώσετε μέσω του eclass. 5. Η ανάπτυξη της κάθε άσκησης θα πρέπει να γίνει ως ξεχωριστό project στο NetBeans. 6. Για την κάθε άσκηση, μπορείτε να συμπεριλάβετε ένα επιπλέον αρχείο README (στο φάκελο του αντίστοιχου NetBeans project) με αναφορά σε επιπλέον σχεδιαστικές επιλογές που ακολουθήσατε ή προβλήματα που αντιμετωπίσατε, κατά την ανάπτυξη των προγραμμάτων σας. 7. Θα πρέπει να παραδώσετε μόνο ένα συμπιεσμένο αρχείο με όνομα <ονοματεπώνυμο>_<am>, το οποίο θα περιέχει τα NetBeans projects (ένα για κάθε άσκηση) που υλοποιήσατε, έτσι ώστε όταν τα συζητήσουμε από κοντά να μπορούν να γίνουν άμεσα import στο NetBeans. 8. Τα προγράμματά σας θα πρέπει να περιέχουν επαρκή σχόλια. Κάθε πρόγραμμα θα πρέπει να ξεκινά περιγράφοντας τη λειτουργικότητά του. Τετάρτη, 26 Δεκέμβρη 2018 2 ο Σετ Ασκήσεων 4
9. Επιλέξτε κατάλληλα ονόματα για τις κλάσεις σας, τα πεδία τους, τις μεθόδους τους και τις μεταβλητές τους, βάσει των αρχών που συζητήσαμε στις διαλέξεις του μαθήματος. 10. Βεβαιωθείτε ότι τα προγράμματα που παραδίδετε μεταγλωττίζονται χωρίς προβλήματα και εκτελούνται σωστά. 11. Επιτρέπεται καθυστερημένη παράδοση του σετ ασκήσεων. Ωστόσο, εάν παραδώσετε το σετ ασκήσεών σας k μέρες μετά τη λήξη της προθεσμίας, τότε θα βαθμολογηθεί με άριστα το (100 - k*10)%. Καλή επιτυχία! Ελευθέριος Κοσμάς Τετάρτη, 26 Δεκέμβρη 2018 2 ο Σετ Ασκήσεων 5