$25
Stack Integer Calculator MVC project (using Agile Development/Scrum)
>The model-view-controller (MVC) is an architectural pattern commonly used with graphical user interfaces (GUI). The MVC splits application into three interconnected parts. This is done to allow for efficient code reuse and parallel development. The relation is thus - the user sees the View and uses the Controller which in turn manipulates the Model which updates the View.
You have been given a View and Controller for a basic integer calculator, **you are to integrate a Model** which will take input from the Controller and update the View. **Make sure your Model throws appropriate exceptions** (either use built-in Java ones or your own created/custom ones) for errors and handle the errors in `CalculatorView.actionPerformed()` appropriately (*hint*: GUIs!). **You must provide JUnit tests for the methods within your Model** (that includes the overriden `evaluate()` method), make sure to put any JUnit testers in a `tests` directory. Finally, **make sure to keep your UML class diagrams for your project updated** for each sprint, you are given the UML diagram for the start of this project (you are also given the HTML file to edit in [draw.io](https://www.draw.io/)). Any documentation should go in the `doc` directory, don't forget to update this markdown file to add the image in the placeholder at the end.
**Your model should use a stack data structure to evaluate integer expressions**, account for the order of operations for addition, subtraction, multiplication, division and parentheses. **As well, integrate one of the following** :
- ***Polynomial Arithmetic***
Integrate your previously built Polynomial and Term classes to allow for addition, subtraction and multiplication of a term unto a polynomial.
*Ex.* `3x * (4x^2 + 2x)` = `12x^3 + 6x^2`
- ***Simple Derivatives***
Allow for terms with your previously built Term class and allow for simple derivation of single terms.
*Ex.* `3x^2` = `6x`
- ***Vector Operations***
Allow for entry of vectors and add dot product, cross product and scalar multiplication.
### Stack Integer Calculator – UML Class Relationship Diagram
![UML class diagram](doc/UML_classDiagram.png)
### Stack Integer Calculator - Wireframe
![wireframe](doc/calculatorViewLayout.png)
### Stack Integer Calculator - Final GUI Screenshot
![final GUI screenshot](doc/calculatorStartGUI.png)
----------
***Remember that at the end of each sprint you should have a working produce to showcase (each week there will be a check-in during class time). Make sure to keep your Trello board updated as well!***
----------
## Sprint 0 (Planning sprint)
- [ ] Gather requirements
- [ ] Think, dialogue with partner, and make some big technical decisions (decide on data structure(s) that is/are the most reasonable for implementation, classes to create, methods for each, diagrams, etc.)
- [ ] Create detailed description of what you are accomplishing/doing
- [ ] Breakdown into two logical/doable sprints (Sprint 1 and Sprint 2)
- [ ] Formally define **each** sprint with the following (*see Topic 1 for more details*):
- [ ] User Story (1-2 sentences in everyday language of end user that summarizes what needs to be developed)
- [ ] Create list of tasks and tests, using an Agile task board to keep track (Trello)
- [ ] Create definition of done (required for every sprint):
- *Code adheres to coding standard/convention*
- *Code is documented*
- *Code checked into GitHub*
- *Unit tests were written, all pass*
- *Relevant diagrams and documentation updated and accurate (UML class/sequence diagrams, etc.)*
- [ ] Complete following statement in space below:
>The Stack implementation we will be using is a regular stack. This data structure is useful because it allows us to store data in a well organized and efficient way by allowing individual operands and values to be stored in a linear way. Since we are implementing a stack, when poping items off of the stack it allows sequential ordering of each items poped, which mean it would have a O-Notation of O(1) or O(n).
## Sprint 1 (???)
**User Story**:
>As a ***???*** I want to ***???*** so that ***???***.
**Definition Of Done**:
- [ ] General requirements
- *Code adheres to coding standard/convention*
- *Code is documented*
- *Code checked into GitHub*
- *Unit tests were written, all pass*
- *Relevant diagrams and documentation updated and accurate (UML class/sequence diagrams, etc.)*
- [ ] Product owner agrees
## Sprint 2 (???)
**User Story**:
>As a ***???*** I want to ***???*** so that ***???***.
**Definition Of Done**:
- [ ] General requirements
- *Code adheres to coding standard/convention*
- *Code is documented*
- *Code checked into GitHub*
- *Unit tests were written, all pass*
- *Relevant diagrams and documentation updated and accurate (UML class/sequence diagrams, etc.)*
- [ ] Product owner agrees