Εφαρμόστε την incremental development τεχνική για την ανάπτυξη μιας λειτουργούσας έκδοσης της RPN Calculator.
Σας συνιστώ να ακολουθήσετε τα παρακάτω βήματα για την καλύτερη κατανόηση των εννοιών. Σε κάθε περίπτωση εσείς αποφασίζετε σε ποια από αυτά θα επιμείνετε με κριτήριο την εξοικείωση σας με τον προγραμματισμό.
Περιγράφονται στη συνέχεια ένα σύνολο από επαναλήψεις (iterations) που οδηγούν σε μια λειτουργούσα αριθμομηχανή η οποία θα χρησιμοποιεί μόνο την γραφική διεπαφή ως έτοιμη κλάση. Την δική σας γραφική διεπαφή θα αναπτύξετε σε επόμενη δραστηριότητα.
Στην διαδικασία εκτέλεσης της άσκησης αυτής θα δείτε inheritance, interfaces, Lambda expressions.
Iteration Νο 1 - The Calc Class
Αναπτύξτε ένα πρόγραμμα σε Java σύμφωνα με το οποίο το σύστημα θα προσθέτει τους αριθμούς 12.0 και 24.0 και θα δίνει στην κύρια έξοδο το αποτέλεσμα της άθροισης τους.
Design Constraint: Stack must be used to store operands.
Constituent Components of java library: Java.util.Stack, Java.lang.Double, java.lang.System
New component: Calc
Όπως περιγράφεται στις διαφάνειες με τίτλο LegoApproach5 (ενότητα 1st iteration).
Iteration Νο 2 - Increase Modularity, Integrate components
Increase modularity by extracting code from main() and defining the class Adder.
Όπως περιγράφεται στις διαφάνειες με τίτλο LegoApproach5 partOf (ενότητα 2nd iteration - Increase modularity).
Δουλέψτε πάνω στις εναλλακτικές υλοποιήσεις του Adder. Τις συζητήσαμε στην διάλεξη.
Iteration Νο 3 - Adding a Gui
Όπως αναλυτικά περιγράφεται στις διαφάνειες με τίτλο LegoApproach5 (ενότητα 3rd Iteration – Adding a Gui).
Σας δίνεται μια έτοιμη γραφική διεπαφή σε μορφή jar file. Θα την προσθέσετε στην έκδοση που αναπτύξατε στο iteration No 2.
Χρησιμοποιήστε την κλάση CalculatorGui that is included in the file CalcGuiV1Exer6.jar.
Constructor: CalculatorGui(Operand op);
Θα πρέπει να δουλέψετε στο default package.
H γραφική διεπαφή είναι όπως αυτή του σχήματος 3.2.
Σχήμα 3.2. H γραφική διεπαφή του 3ου iteration.
Ορίστε την δική σας κλάση Operand και υλοποιήστε μια έκδοση της RPN Calculator η οποία θα επιτρέπει στον χρήστη να εισάγει ένα operand και να το βάζει στην στοίβα. Προσέξτε τον παρακάτω περιορισμό.
O developer της CalculatorGui έχει υποθέσει πως η κλάση Operand διαθέτει τις παρακάτω μεθόδους πάνω στις οποίες βασίζετε το interaction της γραφικής διεπαφής με το instance της Operand για την διαμόρφωση της τιμής του.
class Operand public methods:
public Operand(int val) {}
public void addDigit(char ch){}
public void deleteLastDigit(){}
public void complete() {}
public void reset(){}
public void set(int val) {}
Τροποποιήστε το πρόγραμμα σας ώστε να ελέγξετε αν ο operand μπήκε στην στοίβα.
Iteration Νο 4 - Adding Operators
Όπως αναλυτικά περιγράφεται στις διαφάνειες με τίτλο LegoApproach5 (ενότητα 4th Iteration – Adding Operators).
Χρησιμοποιήστε την κλάση CalculatorGui that is included in the file CalcGuiV2Exer8.jar.
Constructor: CalculatorGui(Operand op, Adder add, Subtracter sub, Multiplier mul, Divider div, ResultPresenter rp)
H γραφική διεπαφή είναι όπως αυτή του σχήματος 3.3.
Ορίστε κατάλληλα τις δικές σας κλάσεις για τους τελεστές και προχωρήστε στην σύνθεση της εφαρμογής σας.
Η κλάση CalculatorGui έχει ένα class data member τύπου TextField με όνομα display. Αξιοποιήστε το για να εμφανίζετε στην γραφική διεπαφή την τιμή της operand και του αποτελέσματος.
Iteration Νο 5 - Using Inheritance
Όπως αναλυτικά περιγράφεται στις διαφάνειες με τίτλο LegoApproach5 partOf (ενότητα 5th Iteration – using inheritance).
Χρησιμοποιήστε ως βάση τον κώδικα που υλοποιήσατε στο iteration 4 και δώστε μια βελτιωμένη έκδοση που θα αξιοποιεί τον μηχανισμό της κληρονομικότητας (inheritance).
Iteration Νο 6 - Using Interfaces
Όπως αναλυτικά περιγράφεται στις διαφάνειες με τίτλο LegoApproach5 (ενότητα 6th Iteration – using interfaces).
To iteration αυτό έχει σημαντική δυσκολία για το επίπεδο γνώσεων σας και είναι προαιρετικό. Μπορείτε να το αφήσετε για αργότερα.
Χρησιμοποιήστε ως βάση τον κώδικα που υλοποιήσατε στο iteration 5 και δώστε μια βελτιωμένη έκδοση που θα αξιοποιεί τον μηχανισμό του interface για μια πιο χαλαρή σύνδεση μεταξύ γραφικής διεπαφής και Operand. Το interface OperandIf είναι μια επιλογή προς την κατεύθυνση αυτή
Iteration Νο 7 - Using Lambda expressions
Όπως περιγράφεται στις διαφάνειες με τίτλο LegoApproach5 (ενότητα 6th Iteration – using Lambda).
To iteration αυτό είναι προχωρημένο για το επίπεδο γνώσεων σας. Αφήστε το για αργότερα.
Χρησιμοποιήστε ως βάση τον κώδικα που υλοποιήσατε στο iteration 5 και δώστε μια βελτιωμένη έκδοση που θα αξιοποιεί Lambda expressions.
Ερώτηση
Ποια από τις 3 εκδόσεις (iteration 4, 5, 6) θα προτιμήσετε και γιατί; Αιτιολογήστε.
Τοποθετήστε την απάντηση σας σε αρχείο με όνομα Answer και τοποθετήστε το στο ευρετήριο του project που θα παραδώσετε.