Σε αυτή την άσκηση σας ζητούν να υλοποιήσετε μια απλή εφαρμογή.
Δεν θα μπούμε στην διαδικασία υλοποίησης του κώδικα αλλά θα σας υποδείξουμε ένα πιο "μαθηματικό" τρόπο σκέψης.
Σίγουρα αυτός ο τρόπος δεν είναι ο μοναδικός ή μπορεί να μην είναι ο βέλτιστος.
Ανάλυση κώδικα
Η κλάση Employee διαθέτει πέντε attributes.
Ο χαρακτηρισμός private δηλώνει ότι το attribute θα είναι περιορισμένης εμβέλειας εντός της κλάσης. Επίσης η κλάση διαθέτη πίνακα associates[]τύπου Employee ο οποίος υλοποιείται εντός του κατασκευαστή αναλαμβάνοντας αριθμό θέσεων (numOfAssociates) τον αριθμό που ορίζει ο χρήστης κατά την δημιουργία ενός υπαλλήλου. Με άλλα λόγια κάθε ένας υπάλληλος διαθέτει και έναν πίνακα.
Η μεταβλητή indexOfAssociates αρχικοποιείται με μηδέν και εκφράζει απλά έναν αριθμό που θα αυξάνει για να τοποθετεί τους υπαλλήλους στις κατάλληλες θέσεις του πίνακα associates.
Ακολουθούν οι μέθοδοι και σε εξέχουσα θέση την μέθοδο addAssociate.
Ανάλυση Επίλυσης
Θα σχεδιάσουμε σε ένα χαρτί τα στοιχεία για την ιεραρχία των υπαλλήλων ως γράφο ενώ θα καταγράψουμε και κάποιες σκέψεις. Θα είναι:
Στον γράφο αυτόν οι υπάλληλοι θα είναι οι κορυφές και οι σχέσεις τους οι ακμές. Το γράφημα είναι κατευθυνόμενο με κάθε ακμή να διαθέτει δύο κατευθύνσεις.
- Ο Μ1 είναι ο γενικός διευθυντής του οργανισμού και όλοι είναι υφιστάμενοι του.
- Ο Μ2 είναι ο επόμενος διευθυντής αφού έχει δύο υφισταμένους.
- Οι υπόλοιποι είναι οι υφιστάμενοι και συμβολίζονται με το γράμμα e
Κάθε σχέση που υλοποιείται αποδίδει και έναν βαθμό κορυφής d.
- Ο βαθμός κορυφής d δηλώνει τον αριθμό σχέσεων του, καθώς και το επίπεδο ιεραρχίας που βρίσκεται. (getRank).
- Στην μέθοδο getRank() θα πρέπει να ξεπεράσετε το εμπόδιο και να δηλώσετε τους βαθμούς με τρόπο τέτοιο ώστε ο Μ1 να εμφανίζει rank=0 , και ο Μ2 να εμφανίζει rank= 1 και οι υπόλοιποι αφού δεν είναι διευθυντές, ως έχουν.
- Ανάλογα με την σχεδίαση και την υλοποίηση του κώδικα το πεδίο myManager μπορεί να είναι πίνακας ή ένα απλό String.
- Δεν θα αναφερθούμε στις μεθόδους addAssociates, reportTo και isManager γιατί προκύπτουν από το γράφο.
- Η μέθοδος toString() θα επιστρέφει το στοιχεία του υπαλλήλου.
Σας ζητούν να υλοποιήσετε την κλάση Organization. Θα πρέπει να σκεφτείτε πληθυκότητες και να βρείτε τον τρόπο να ορίσετε τις σχέσεις μεταξύ των κλάσεων.
Η μέθοδος εκτύπωσης θα ανήκει στην κλάση Organization που θα υλοποιήσετε. Δουλεία της είναι να εκτυπώνει τα στοιχεία εκείνα που προφανώς θα βρίσκονται αποθηκευμένα στην κλάση, με την βοήθεια της toString(). Στην ίδια κλάση ανήκει και η main δηλαδή η Organization θα είναι η "εκτελέσιμη" κλάση.
Υπομονή και καλή συνέχεια στην μελέτη σας.