Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit

Class Project

MET CS 665 - Software Design and Patterns


1 Project Guidelines

One of the requirements for this course is the final project (20% of the grade). The project must be done individually. This is an opportunity for you to be creative in solving a problem that is of interest  to  you  and  demonstrate  your  software  design  proficiency.  The  project  should  be challenging enough so that you could discuss with professional software developers.

We have covered in our class a list of design patterns. We have learned about Strategy, Factory, Abstract Factory, Singleton, Prototype, Command, Observer, State, Template, Facade, Decorator, Composite, Adapter, Proxy, Iterator and Mediator patterns.

However, the list of existing design patterns are longer than what we covered in our class. You can find a list of design patterns that can be used in Java programming language on the following        website:

http://java-design-patterns.com/patterns/

Your main task for the class project is to learn about further design patterns. You should pick up one of the design patterns that we have not covered in our class, learn it on your own, create and describe a use case scenario for it (it should be a new scenario which is not described in any references like books or Websites), implement it in your favorite programing language and create a presentation about the design pattern and your scenario.

It is recommended to use a combination of design patterns in your project because in real software projects a combination of patterns are used.

Your project should include one design pattern that we have not covered in our class. You read the above list and find select one of the design patterns that you like. Some examples of important patterns that we have not covered deeply in our class are: Visitor, Bridge, Mediator, Builder, Callback, Delegation, Thread Pool.

Note: Your project idea should not be copied from existing books or websites. Your project should be a unique project based on your own ideas.

2 Project Tasks

2.1 Task 1 : Design pattern and its Use Case Scenario Description. ( 5 points) Provide    description of the application                   scenario that         have selected for           final


Describe what are your main software design concepts regarding this application. For example describe:

What are the design goals in your project?

How is the flexibility, of your implementation, e.g., how you add or remove in future new types?

How is the simplicity and understandability of your implementation?

How you avoided duplicated code?

You should use design patterns in your project. You can use a combinations of

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.

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 4 - Implement your solution in Java (5 points )


You should use the provided project templates to implement your project.

Provide a zip le 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 les before creating the zip les.

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.

Remember to create unit tests.

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.

2.4 Task 4 - Create a presentation about your project (5 points) Create a presentation for your final project and upload a ppt, pdf or odp file. You    will presenting in class.

2.6 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:

1. You need to have your own GitHub account.

2. Login to your own GitHub Account

3. 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.

4. You need to provide access to your GitHub Classroom in our account (This is a one time setup for the GitHub Classroom App).

5. Then a private repository will be created for you that you, your instructor and facilitator have access to it.

6. You should use ”Star” the assignment repository to be able to find it easier and use it when you develop your assignment.

7. A good rule of thumb is commit your code to the repository as soon as you have implemented some small piece of code that does something and can compile.

2.7 Turnin

1. 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.

2. Create a single document that has results for all three tasks. For example a PDF document for UML diagrams.

3. 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.


4. 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 le of your repository and upload it to blackboard.

Please note that we will grade your final zip le 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 le on blackboard is to archieve a zip le of your assignment on blackboard.