Classes and UML Lab

Classes in Java and their representation in UML.

Introduction

The goal for this activity is to implement a Car class so that it conforms to the UML below:

classDiagram
class Car
  Car: -String make
  Car: -int year
  Car: -double speed
  Car: +Car(m String, y int)
  Car: +toString() String
  Car: +getMake() String
  Car: +getSpeed() double
  Car: +getYear() int
  Car: +accelerate() String
  Car: +brake() void

Part 1: Driver, Constructor and toString

  1. Create two Java class files: CarTester.java and Car.java. Only CarTester.java should include a main method.
  2. Add the three instance variables from the UML diagram to your Car class.
  3. Code the constructor for your Car class. This should initialize the make and year fields using the arguments to the constructor. The speed should be initialized to 0.
  4. Code the toString method. This method should take no parameters and should return a String that looks like this (except with the angle-bracketed parts replaced with this car's values):
    "A <year> <make> that is going <speed> mph"
    
  5. Test your partially completed Car class by adding code to the main in CarTester.java that creates and prints two car objects. The contents of main should look something like the following.
    Car car1;
    Car car2;
    
    car1 = new Car("Ford", 1997);
    car2 = new Car("Toyota", 2014);
    
    System.out.println(car1.toString());
    System.out.println(car2.toString());
    

Part 2: Remaining Methods

Complete each of the remaining methods of the Car class. Test each method by adding appropriate calls to main.

  • The three "getter" methods should each return the value of the appropriate instance variable.
  • The accelerate method should increase the current speed of the car by 5.0 mph. It should also return a String that describes the change to the speed, e.g. "15.0 + 5.0 = 20.0". It should NOT be possible to increase the speed beyond 150.0 mph. If a call to accelerate would push the speed beyond 150.0, the speed should be set to 150.0. (reaching this limit should be reflected in the returned String as well, i.e. "150.0 + 0.0 = 150.0")

    (How will you test that this is working correctly? How many times do you need to call accelerate before the upper speed limit is reached? Might a loop be helpful here?)

  • The brake method should decrease the current speed by 5.0 mph. It should not be possible for the speed to drop below 0 mph.

Submit Car.java only to Gradescope per your section's deadline. Gradescope will run Checkstyle tests on your submission.

Acknowledgements

Thank you to Dr. Sprague for this activity.