Assignment 1: Java finger exercises ► Assignment 1: Java finger exercises 1 Purpose 2 Getting started 3 Adding a class 4 Adding a method 5 Grading standards 6 Submission Assignment 1: Java finger exercises 1 Purpose 2 Getting started 3 Adding a class 4 Adding a method 5 Grading standards 5.1 The style guide 6 Submission 6.1 Deliverables 6.2 Instructions 7.7 Assignment 1: Java finger exercises Due:Fri 05/08 at 9:00pm; self-evaluation due Sat 05/09 at 10:00pm Starter files: code.zip 1 Purpose The primary goal of this assignment is to get you writing Java (again or for the first time). As a secondary goal, completing this assignment will help you ensure that you have a properly configured and working Java development environment and IDE, and that you can use the submission system. 2 Getting started Before you start this assignment, please ensure that you have all the necessary tools to complete an assignment. They include: Java 11 SDK IntelliJ IDEA Successful registration on the Bottlenose server to submit an assignment Successful registration on Piazza to post and get answers to common questions Please review the directions on the course page if you need help setting up any of this, or talk to the course staff. To start this assignment: Get the code for this homework assignment using the “Starter files” link above. Take a look at the provided code: The code from The Essence of Objects appears in src/cs3500/hw01/publication, with tests in test/cs3500/hw01/publication. File test/Hw01TypeChecks.java contains a small class designed to help you detect when your code may not compile against the grading tests. In particular, if including test/Hw01TypeChecks.java—unmodified, in that directory!—in your project produces compilation errors, then it won’t compile for the course staff either. 3 Adding a class This part of the assignment is a continuation of the code written in The Essence of Objects. In particular, you will write a Java class Webpage (in package cs3500.hw01.publication) that implements the Publication interface from lecture, with the same functionality as web page objects created by the ISL+λ function new-webpage, as seen in the lecture notes. Write a class Webpage that implements the Publication interface. It must define a public constructor: public Webpage(String title, String url, String retrieved) The signature of the constructor, including the order of the arguments, is important to enable automated-test–based grading for functional correctness. Don’t forget to write a good Javadoc comment. See how to cite a webpage in MLA and APA style by looking at the Racket code in The Essence of Objects. Write a JUnit 4 test class, WebpageTest, that tests both public methods of Webpage. 4 Adding a method Compared to the version from class, there are two changes in the code for this homework: Interface Duration now has an additional method, format(String), along with a Javadoc comment detailing its specification. Class AbstractDurationFormatTest contains two simple test methods for format, called formatExample1 and formatExample2. These serve as examples, and you will need to add several more to have good test coverage. Add tests for format only to this class, or else the autograder will not work properly. To complete this assignment: You must write sufficient tests to be confident that your implementation of the format method is correct. Your tests should exercise every non-trivially distinct possibility. It is recommended that you write these tests before attempting to implement the format method as specified below. Doing so will help you clarify how the method is supposed to work. The autograder for this portion of the homework is slightly tricky, and requires your code to be designed in a particular way. First, your tests must be placed in the AbstractDurationFormatTest class, and you must leave unchanged the portion of the file marked "Leave this section alone". Second, do not explicitly use new in your tests: as we did in class, use the hms and sec methods to construct examples of Durations. The autograder will run your tests against several new Duration classes with deliberately-buggy format implementations, and against one perfectly-correct implementation; to earn full credit on this autograder, you must have sufficient tests to catch all of these bugs. In other words, you will succeed on this homework if you write enough correct tests to comprehensively check the format method, such that at least one fails on any buggy implementation of it, but all tests pass on the correct implementation. Remember: test failures are good things! You must implement the Duration.format(String) method in the appropriate place(s). Your implementation must not use any of the string replacement methods such as replace or replaceAll. (We strongly suggest that you use iteration and not recursion to process a string.) The Javadoc description of this method is a sufficient specification for this method, but requires careful attention: an overly-hasty reading will probably miss some edge cases. The autograder will also test your implementation for correctness, regardless of whether you wrote your own test cases. 5 Grading standards For this assignment, you will be graded on whether your code compiles, whether your code implements the specification (functional correctness), whether you thoroughly test every method that you write how well you follow the style guide. whether your program is suitably commented 5.1 The style guide Coding style is important. For this class we follow Google’s Java style guide. It’s comprehesive but not very long, so I suggest reading the whole thing and then referring to it as needed. While it can’t yet take on full responsibility for formatting code—much less for programming style more broadly—your IDE may be able to help you follow the code formatting portion of the style guide: For Intellij IDEA, download intellij-java-google-style.xml and save it in the config/codestyles/ subdirectory of your IntelliJ configuration folder. Then from within IntelliJ, go to File > Other Settings > Default Settings..., then in the dialog that pops up, go to Editor / Code Style, and select it in the Scheme dropdown, where it should have appeared as an option. If you’ve already created a project, then you’ll additionally need to set this as the project style, using File > Settings. Check here for more info. 6 Submission Ready to submit? Look at the Design Principles Master List first! (Not all items there may apply to this assignment) 6.1 Deliverables Your submission should include Webpage.java, WebpageTest.java, and any files you had to modify or create in order to implement and test your format(String) method. Please ensure that your submission is a zip file. This zip file should contain your src/ and test/ folders from your project, and only those folders. These folders should mimic the folder structure required for your packages (e.g. for a class inside cs3500.hw01.duration, the src/ folder should contain a cs3500/ folder, inside which is a hw01/ inside which is a duration/ folder). Please do not put these folders within another folder before submitting, as the grader will not find your files. Here is a good example: my-submission.zip
+-src/
| +-cs3500/
| +-hw01/
| +-duration/
| | +-Java files for durations
| +-publication/
| +-Java files for publications
+-test/
+-whatever tests you wrote...
possibly in packages... and here is a bad example: my-submission.zip
+-My Awesome Homework 1/
+-src/
| +-cs3500/
| +-hw01/
| +-duration/
| | +-Java files for durations
| +-publication/
| +-Java files for publications
+-test/
+-whatever tests you wrote...
possibly in packages... 6.2 Instructions You will submit the assignment on the Bottlenose server. Follow these instructions: Log in to the server using the link above, using your Khoury account (not the northeastern account). Follow directions on the course page if you do not have a Khoury account or have forgotten your password. You must be registered as a student to CS 3500 for Fall 2020. Follow directions on the course page if you have not applied for registration. Submit the zip file you made above to Assignment 1 on the submission server. Note that for the autograded portions, it may take some time to see feedback. This time increases as we get closer to the deadline, because many more students tend to submit. Please be patient! Submit to the assignment by the above deadline, and to the self-evaluation by its deadline.