Assignment 1
Software Design and Patterns Application - Fully Automatic Beverage Vending Machine (20 points)
GitHub Invitation Link https://classroom.github.com/a/LWBcsnmf
1 Application Description
In this assignment, you will implement an application that controls a “Fully Automatic Beverage Vending Machine”. Your are responsible to implement the controller software of this machine. The software should be able to control the brew process of different coffee and tea beverages.
The machine should be able to
• brew Coffee sorts of Espresso, Americano, Latte Macchiato, and
make Tea sorts of Black Tea, Green Tee and Yellow Tea.
When the machine stats up and is initiated, it shows a request question and ask users about their beverage wishes. After each brew process the state of the beverage machine should return to the same initial state and display the request question to ask users again.
As an additional requirement, the coffee machine should be able to add condiments like milk and sugar to the hot beverage. Users of the machine should be able to select between zero to 3 units of milk or sugar to add. More than 3 units is not allowed.
Note: There is no need to implement a graphical user interface (GUI). Implement Unit Tests to show functionality of your implementation.
1.1 Implementation Details
The described application scenario can be implemented in different ways and there is not only one single correct implementation for the above application scenario. Software developers might consider different assumptions and design the software based on them.
In this assignment you ( as a software developer) are free to have your own detail assumptions and implement it in your own way.
You should document your assumptions very well in your README.md file of your assignment and consider them in your UML diagrams.
Optional Task: As an additional requirement, the coffee machine should be able to add Condi-ments like milk and sugar to to the hot beverage. Users should be able to select between zero to 3 units of milk or sugar to add to their hot beverage. More than 3 units is not allowed.
1
2 Assignment Tasks
2.1 Task 1 : Implementation Description. (2 points )
Provide a description of how would you implement this application considering software design principles. Describe what are your main software design concepts regarding this application.
For example describe:
• How flexible is your implementation, e.g., how you add or remove in future new drink types?
How is the simplicity and understandability of your implementation? • How you avoided duplicated code?
In case that you have used any design patterns, describe which design pattern you have applied and why.
Write your description in a README.md file, use MarkDown format https://spec. commonmark.org/current/ and add the README.md file to the root folder of your project.
We recommend to write this description after you finished the other tasks in this assignment.
2.2 Task 2 - UML Class Diagram. (5 points )
Create a class model for your application, containing 5-8 of the most important classes. It should encompass the functionality of the use case application described above. Show only non-obvious and key methods.
2.3 Task 3 -Implement your solution in Java (13 points )
You should use the GitHub classroom. It will create a private repository for your assignment.
You should commit your code to the private Github repository created for your assignment
(See the following section about GitHub Classroom).
You should use the provided project templates to implement your project.
Provide a zip file that includes your implementation package.
The zip file should include a README.md file that describes how to compile and run your implementation. Create a Zip file from the root of your working directory so that it includes all subdirectories of your project. Remove the binary files before creating the zip files.
Your zip file should not be larger that 10MB, include only source files of your project but not the binaries that you generated.
Document your code very well. The best way to write documentation inside your code is to write the code while you are implementing the project and not postpone it to later time.
You should use the Google Java Style Guide (https://google.github.io/styleguide/javaguide.html)
We should be compile your solution on a unix-based operating system like Linux or MacOS. Your project should include a run.sh that can be used to compile and run your project.
It is highly recommended to implement unit tests for your implementation. If you are imple- menting in Java you can use libraries like Junit to implement the unit tests.
Page 2 of 5
2.4 Using GitHub Classroom
For all of your assignments you should use GitHub Classroom.
You should use the provided project templates to implement your project. Login to your github account and click on the Github Invitation Link, a fresh private project with propagated template project will be created for you.
Follow the following steps:
You need to have your own GitHub account.
Login to your own GitHub Account
Click on the Invitation Link for this Assignment and Click on Accept to accept the assign- ment. You can find the GitHub Link for this assignment on the first page of the assignment.
You need to provide access to your GitHub Classroom in our account (This is a one time setup for the GitHub Classroom App).
Then a private repository will be created for you that you, your instructor and facilitator have access to it.
You should use ”Star” the assignment repository to be able to find it easier and use it when you develop your assignment.
Agoodruleofthumbiscommityourcodetotherepositoryassoonasyouhaveimplemented some small piece of code that does something and can compile.
2.5 Turnin
When you are finished with your assignment. You need to download all of your code from GitHub or have the latest version of your code on your computer.
Create a single document that has results for all three tasks. For example a PDF document for UML diagrams.
Please zip up all of your code and your document (use .zip only, please!). Remember to remove the binary files, these are normally in bin/ or target/ folders. The binary files can increase the size of your zip file.
Double check if you have uploaded correctly your zip file. You can download back your file, unzip it and check if it is the correct file and it is correctly zipped. We will evaluate the zip file that you have uploaded to the blackboard and cannot evaluate wrong or damaged files.
You can use the green download button of GitHub, download a zip file of your repository and upload it to blackboard.
Please note that we will grade your final zip file uploaded to the Blackboard, but we will also check the history of your GitHub repository. Both versions should be the same. The main reason why we want to have zip file on blackboard is to archieve a zip file of your assignment on blackboard.
Page 3 of 5
2.6 Grading
You solution should be a self-contained solution that can be compiled executed based on the in- struction given in your README.md file. We recommend to use our project templates, and add your implementation to our template and use build tools like maven or sbt. If your solution program is complete based on the requested functionalities, can compile and run then you would get the full points.
We will grade your solution, and reduce the points for each task based on the following grading policy.
Your UML diagram does not include important components like Interfaces/Classes - 5% reduction for each component.
We will compile all solution using ”mvn compile” command in your project (we will down- load your zip file, unzip it and run the “mvn compile” - your project should compile using Java JDK 1.8 ). If your code does not compile for any reason it will cause 10% grade deduction for the implementation task.
Your code includes functionality bugs - 10% deduction for each bug
Your code should include a README.md that describes your conceptual solution, how to compile and execute. If your program does not include such README.md file, or your README file does not include all requested infos then we will reduce 10% of points.
Your program does not implement the requested functionalities - 10% deduction for each functionality.
Wewillprogrammaticallycheckallsolutionsforplagiarismusingjplag(https://github.com/jplag/jplag ) (We will run some scripts on your codes). If your code is a exact duplicate of someone else’s solution, then we cannot accept your solution. We will contact you regarding the issue.
2.7 Assignment Completion and Late Work
All assignments should be submitted on time. If there is a delay, the student must be in touch with the instructor and his/her facilitator.
Late submissions without reasons will result in grade deduction. You can turn in an assignment up to 24 hours late, in which case you receive a 10% penalty (that is, 10 points are subtracted from an assignment that is worth 100 points), or up to 48 hours late, in which case you receive a 20% penalty. Assignments turned in after (more than 48 hours late) that are not accepted.
We kept on saying no exceptions, but there are exceptions in very extreme circumstances, with proper documentation. For example, if you obtain a doctor/dentist note stating that you were so ill at the due date/time that you could not reasonably be expected to meet the deadline, it is possible to get an extension.
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t
Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of
1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of