Car
class needs to be used in
a simulation of New York City traffic in which each actual
car on the street is represented by one Car object.
That's a lot of cars. As currently written each car object occupies
approximately 60 bytes of memory (depending mostly on the
size of the license plate string. We can knock off eight bytes per car
by using floats instead of doubles, but the interface can stay the same:
public class Car {
private String licensePlate; // e.g. "New York A456 324"
private float speed; // kilometers per hour
private float maxSpeed; // kilometers per hour
public Car(String licensePlate, double maxSpeed) {
this.licensePlate = licensePlate;
this.speed = 0.0F;
if (maxSpeed >= 0.0) {
this.maxSpeed = (float) maxSpeed;
}
else {
maxSpeed = 0.0F;
}
}
// getter (accessor) methods
public String getLicensePlate() {
return this.licensePlate;
}
public double getMaxSpeed() {
return this.speed;
}
public double getSpeed() {
return this.maxSpeed;
}
// setter method for the license plate property
public void setLicensePlate(String licensePlate) {
this.licensePlate = licensePlate;
}
// accelerate to maximum speed
// put the pedal to the metal
public void floorIt() {
this.speed = this.maxSpeed;
}
public void accelerate(double deltaV) {
this.speed = this.speed + (float) deltaV;
if (this.speed > this.maxSpeed) {
this.speed = this.maxSpeed;
}
if (this.speed < 0.0) {
this.speed = 0.0F;
}
}
}
Since the interface is the same, no other classes that depend on this class need to change or even be recompiled. We might save even more by using a custom
LicensePlate
class that only allowed one-byte ASCII characters instead of
two byte Unicode characters.