Ενότητα 5 - Εργασία

Εργασία Ενότητας 5

Υλοποιήστε στην Java την ιεραρχία κλάσεων του διαγράμματος που ακολουθεί. Το διάγραμμα αποτελείται από ένα interface (Payable) και τρεις κλάσεις. Η κλάση Employee υλοποιεί το interface Payable και είναι abstract (αφηρημένη), όπως φαίνεται από την πλάγια γραμματοσειρά στο όνομά της. Τέλος οι κλάσεις HourlyEmployee και SalaryEmployee κληρονομούν από την κλάση Employee. Στο διάγραμμα φαίνονται καθαρά όλες οι μεταβλητές μέλη κάθε κλάσης μαζί με τον τύπο τους και τον προσδιοριστή πρόσβασης που χρησιμοποιούν. (- private, + public), καθώς επίσης και όλες οι μέθοδοι με τον τύπο επιστροφής και τις παραμέτρους που λαμβάνουν. Όλες οι μέθοδοι είναι αυτοεπεξηγηματικές, πλην των ακολούθων:

  • double pay(): H μέθοδος αυτή ορίζεται στο interface Payable. Κάθε κλάση η οποία υλοποιεί το interface αυτό θα πρέπει να υλοποιεί τη συγκεκριμένη μέθοδο. Η κλάση Employee υλοποιεί το interface Payable αλλά έχει το δικαίωμα να μην υλοποιήσει την pay() γιατί είναι abstract κλάση, μεταβιβάζοντας την υποχρέωση υλοποίησης της στις παράγωγες κλάσεις της, HourlyEmployee και SalaryEmployee. Στη μεν πρώτη κλάση η pay() επιστρέφει το γινόμενο δεδουλευμένων ωρών επί το ποσό πληρωμής ανά ώρα, ενώ στη δεύτερη περίπτωση επιστρέφει το μηνιαίο ποσό που λαμβάνει ο υπάλληλος ως μισθό.
  • toString(): Η μέθοδος αυτή ανήκει στην κλάση Object από την οποία κληρονομούν όλες οι κλάσεις στη Java. Η συγκεκριμένη μέθοδος επιστρέφει ένα String το οποίο υλοποιείται διαφορετικά σε κάθε κλάση. Στο συγκεκριμένο παράδειγμα υλοποιήστε την να επιστρέφει το όνομα της κλάσης στην οποία περιέχεται.

Τέλος, γράψτε μία κλάση με όνομα της επιλογής σας, στην οποία θα υπάρχει η κεντρική μέθοδος. Εκεί θα πρέπει να δημιουργήσετε δύο αντικείμενα, ένα που θα αντιστοιχεί σε έναν ωρομίσθιο υπάλληλο και ένα που θα αντιστοιχεί σε έναν μισθωτό. Δώστε τιμές τις επιλογής σας για τα πεδία του ονόματος, επωνύμου, ΑΜ, ασφαλιστικού φορέα και περιγραφής εργασίας σε κάθε ένα από τα αντικείμενα αυτά. Για τον μισθωτό θέστε τον μισθό του 1439€ ενώ για τον ωρομίσθιο, έστω πως εργάστηκε 33 ώρες και πληρώνεται 9€ την ώρα. Κάνοντας χρήση του πολυμορφισμού και καλώντας τις κατάλληλες μεθόδους, εμφανίστε στην κονσόλα το όνομα της κλάσης στην οποία ανήκει το κάθε αντικείμενο και ακολούθως το επώνυμο και τα χρήματα που οφείλονται στον κάθε έναν από του δύο αυτούς υπαλλήλους, όπως φαίνεται στην έξοδο που ακολουθεί:


HourlyEmployee Παπαδόπουλος: 297.0 Ευρώ

SalaryEmployee Αθανασίου: 1439.0 Ευρώ


Οδηγίες:

  • Επεξήγηση μεταβλητών μελών:

name: Όνομα υπαλλήλου (π.χ. Γεώργιος)

surname: Επώνυμο υπαλλήλου (π.χ. Ηλιάδης)

id: Αριθμός μητρώου ασφαλιστικού φορέα υπαλλήλου (π.χ. 12228967)

insuranceBody: Ασφαλιστικός φορέας υπαλλήλου (π.χ. ΙΚΑ)

jobDesc: Περιγραφή εργασίας (π.χ. Μηχανικός)

hours: Ώρες εργασίας ωρομίσθιου υπαλλήλου (π.χ 29 ώρες)

rate: Αντίτιμο για εργασία μιας ώρας ωρομίσθιου υπαλλήλου (π.χ. 8 ευρώ)

salary: Μισθός υπαλλήλου (π.χ. 1400 ευρώ)

  • Επεξήγηση UML σύνταξης:

+ : public

- : private

Σχετικά με τα πρότυπα των μεθόδων, έστω πως υπήρχε η ακόλουθη μέθοδος στο διάγραμμα:

+doThis(in n1 : int, in n2 int) : int

Θα έπρεπε στην κλάση σας να ορίσετε μια μέθοδο με όνομα doThis, με προσδιοριστή ορατότητας public, η οποία θα έπρεπε να λαμβάνει δύο παραμέτρους τύπου int n1 και n2 και να επιστρέφει μία τιμή επίσης τύπου int

  • Θα πρέπει να ξεκινήσετε την υλοποίησή σας από επάνω προς τα κάτω, όπως βλέπετε το διάγραμμα, δηλαδή πρώτα από το interface, στη συνέχεια με την αφηρημένη κλάση και τέλος τις συμπαγείς κλάσεις.
  • Πολυμορφική κλήση μεθόδων επιτυγχάνεται όταν έχουμε μία αναφορά κλάσης βάσης η οποία δέιχνει σε ένα αντικείμενο παράγωγης κλάσης και μέσω αυτής καλούμε τις μεθόδους του αντικειμένου στο οποίο δείχνει
class diagram