first commit

This commit is contained in:
Boris
2024-01-15 20:14:10 +00:00
commit 8c81ee28b7
3106 changed files with 474415 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
#BlueJ class context
comment0.params=
comment0.target=Location()
comment0.text=\n\ Constructor\ for\ objects\ of\ class\ Location\n
numComments=1

View File

@@ -0,0 +1,15 @@
/**
* Model a location in a city.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class Location
{
/**
* Constructor for objects of class Location
*/
public Location()
{
}
}

View File

@@ -0,0 +1,11 @@
#BlueJ class context
comment0.params=pickup\ destination
comment0.target=Passenger(Location,\ Location)
comment0.text=\n\ Constructor\ for\ objects\ of\ class\ Passenger\n\ @param\ pickup\ The\ pickup\ location,\ must\ not\ be\ null.\n\ @param\ destination\ The\ destination\ location,\ must\ not\ be\ null.\n\ @throws\ NullPointerException\ If\ either\ location\ is\ null.\n
comment1.params=
comment1.target=Location\ getPickupLocation()
comment1.text=\n\ @return\ The\ pickup\ location.\n
comment2.params=
comment2.target=Location\ getDestination()
comment2.text=\n\ @return\ The\ destination\ location.\n
numComments=3

View File

@@ -0,0 +1,46 @@
/**
* Model a passenger wishing to get from one
* location to another.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class Passenger
{
private Location pickup;
private Location destination;
/**
* Constructor for objects of class Passenger
* @param pickup The pickup location, must not be null.
* @param destination The destination location, must not be null.
* @throws NullPointerException If either location is null.
*/
public Passenger(Location pickup, Location destination)
{
if(pickup == null) {
throw new NullPointerException("Pickup location");
}
if(destination == null) {
throw new NullPointerException("Destination location");
}
this.pickup = pickup;
this.destination = destination;
}
/**
* @return The pickup location.
*/
public Location getPickupLocation()
{
return pickup;
}
/**
* @return The destination location.
*/
public Location getDestination()
{
return destination;
}
}

View File

@@ -0,0 +1,11 @@
#BlueJ class context
comment0.params=company
comment0.target=PassengerSource(TaxiCompany)
comment0.text=\n\ Constructor\ for\ objects\ of\ class\ PassengerSource.\n\ @param\ company\ The\ company\ to\ be\ used.\ Must\ not\ be\ null.\n\ @throws\ NullPointerException\ if\ company\ is\ null.\n
comment1.params=
comment1.target=boolean\ requestPickup()
comment1.text=\n\ Have\ the\ source\ generate\ a\ new\ passenger\ and\n\ request\ a\ pickup\ from\ the\ company.\n\ @return\ true\ If\ the\ request\ succeeds,\ false\ otherwise.\n
comment2.params=
comment2.target=Passenger\ createPassenger()
comment2.text=\n\ Create\ a\ new\ passenger.\n\ @return\ The\ created\ passenger.\n
numComments=3

View File

@@ -0,0 +1,44 @@
/**
* Simulate passengers requesting rides from a taxi company.
* Passengers should be generated at random intervals.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class PassengerSource
{
private TaxiCompany company;
/**
* Constructor for objects of class PassengerSource.
* @param company The company to be used. Must not be null.
* @throws NullPointerException if company is null.
*/
public PassengerSource(TaxiCompany company)
{
if(company == null) {
throw new NullPointerException("company");
}
this.company = company;
}
/**
* Have the source generate a new passenger and
* request a pickup from the company.
* @return true If the request succeeds, false otherwise.
*/
public boolean requestPickup()
{
Passenger passenger = createPassenger();
return company.requestPickup(passenger);
}
/**
* Create a new passenger.
* @return The created passenger.
*/
private Passenger createPassenger()
{
return new Passenger(new Location(), new Location());
}
}

View File

@@ -0,0 +1,14 @@
#BlueJ class context
comment0.params=
comment0.target=PassengerSourceTest()
comment0.text=\n\ Default\ constructor\ for\ test\ class\ PassengerSourceTest\n
comment1.params=
comment1.target=void\ setUp()
comment1.text=\n\ Sets\ up\ the\ test\ fixture.\n\n\ Called\ before\ every\ test\ case\ method.\n
comment2.params=
comment2.target=void\ tearDown()
comment2.text=\n\ Tears\ down\ the\ test\ fixture.\n\n\ Called\ after\ every\ test\ case\ method.\n
comment3.params=
comment3.target=void\ testPickup()
comment3.text=\n\ Test\ for\ successful\ pickup\ of\ a\ passenger.\n
numComments=4

View File

@@ -0,0 +1,55 @@
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* The test class PassengerSourceTest.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class PassengerSourceTest
{
private PassengerSource source;
/**
* Default constructor for test class PassengerSourceTest
*/
public PassengerSourceTest()
{
}
/**
* Sets up the test fixture.
*
* Called before every test case method.
*/
@Before
public void setUp()
{
TaxiCompany company = new TaxiCompany();
source = new PassengerSource(company);
}
/**
* Tears down the test fixture.
*
* Called after every test case method.
*/
@After
public void tearDown()
{
source = null;
}
/**
* Test for successful pickup of a passenger.
*/
@Test
public void testPickup()
{
assertEquals(true, source.requestPickup());
}
}

View File

@@ -0,0 +1,14 @@
#BlueJ class context
comment0.params=
comment0.target=PassengerTest()
comment0.text=\n\ Default\ constructor\ for\ test\ class\ PassengerTest\n
comment1.params=
comment1.target=void\ setUp()
comment1.text=\n\ Sets\ up\ the\ test\ fixture.\n\n\ Called\ before\ every\ test\ case\ method.\n
comment2.params=
comment2.target=void\ tearDown()
comment2.text=\n\ Tears\ down\ the\ test\ fixture.\n\n\ Called\ after\ every\ test\ case\ method.\n
comment3.params=
comment3.target=void\ testCreation()
comment3.text=\n\ Test\ basic\ creation\ of\ a\ passenger.\n\ Ensure\ that\ the\ pickup\ and\ destination\ locations\n\ have\ been\ set.\n
numComments=4

View File

@@ -0,0 +1,57 @@
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* The test class PassengerTest.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class PassengerTest
{
/**
* Default constructor for test class PassengerTest
*/
public PassengerTest()
{
}
/**
* Sets up the test fixture.
*
* Called before every test case method.
*/
@Before
public void setUp()
{
}
/**
* Tears down the test fixture.
*
* Called after every test case method.
*/
@After
public void tearDown()
{
}
/**
* Test basic creation of a passenger.
* Ensure that the pickup and destination locations
* have been set.
*/
@Test
public void testCreation()
{
Location pickup = new Location();
Location destination = new Location();
Passenger passenger1 = new Passenger(pickup, destination);
assertEquals(destination, passenger1.getDestination());
assertEquals(pickup, passenger1.getPickupLocation());
}
}

View File

@@ -0,0 +1,16 @@
Project: taxi-company-outline-testing
Authors: David J. Barnes and Michael Kölling
This project is part of the material for chapter 14 of the book
Objects First with Java - A Practical Introduction using BlueJ
Sixth edition
David J. Barnes and Michael Kölling
Pearson Education, 2016
This project provides a partial implementation of a simulation of
taxis operating on a city grid to pick up and transport passengers.
This is the second stage of this project. It illustrates some basic
testing of the outline implementation.

View File

@@ -0,0 +1,20 @@
#BlueJ class context
comment0.params=company\ location
comment0.target=Shuttle(TaxiCompany,\ Location)
comment0.text=\n\ Constructor\ for\ objects\ of\ class\ Shuttle\n\ @param\ company\ The\ taxi\ company.\ Must\ not\ be\ null.\n\ @param\ location\ The\ vehicle's\ starting\ point.\ Must\ not\ be\ null.\n\ @throws\ NullPointerException\ If\ company\ or\ location\ is\ null.\n
comment1.params=
comment1.target=boolean\ isFree()
comment1.text=\n\ Is\ the\ shuttle\ free?\n\ @return\ Whether\ or\ not\ this\ vehicle\ is\ free.\n
comment2.params=location
comment2.target=void\ setPickupLocation(Location)
comment2.text=\n\ Receive\ a\ pickup\ location.\n\ @param\ location\ The\ pickup\ location.\n
comment3.params=passenger
comment3.target=void\ pickup(Passenger)
comment3.text=\n\ Receive\ a\ passenger.\n\ Add\ their\ destination\ to\ the\ list.\n\ @param\ passenger\ The\ passenger\ being\ picked\ up.\n
comment4.params=
comment4.target=void\ chooseTargetLocation()
comment4.text=\n\ Decide\ where\ to\ go\ next,\ based\ on\ the\ list\ of\n\ possible\ destinations.\n
comment5.params=
comment5.target=void\ offloadPassenger()
comment5.text=\n\ Offload\ a\ passenger\ whose\ destination\ is\ the\n\ current\ location.\n
numComments=6

View File

@@ -0,0 +1,76 @@
import java.util.List;
import java.util.LinkedList;
/**
* A shuttle is able to carry multiple passengers.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class Shuttle extends Vehicle
{
// The list of destinations for the shuttle.
private List<Location> destinations;
// The list of passengers on the shuttle.
private List<Passenger> passengers;
/**
* Constructor for objects of class Shuttle
* @param company The taxi company. Must not be null.
* @param location The vehicle's starting point. Must not be null.
* @throws NullPointerException If company or location is null.
*/
public Shuttle(TaxiCompany company, Location location)
{
super(company, location);
destinations = new LinkedList<>();
passengers = new LinkedList<>();
}
/**
* Is the shuttle free?
* @return Whether or not this vehicle is free.
*/
public boolean isFree()
{
return true;
}
/**
* Receive a pickup location.
* @param location The pickup location.
*/
public void setPickupLocation(Location location)
{
destinations.add(location);
chooseTargetLocation();
}
/**
* Receive a passenger.
* Add their destination to the list.
* @param passenger The passenger being picked up.
*/
public void pickup(Passenger passenger)
{
passengers.add(passenger);
destinations.add(passenger.getDestination());
chooseTargetLocation();
}
/**
* Decide where to go next, based on the list of
* possible destinations.
*/
private void chooseTargetLocation()
{
}
/**
* Offload a passenger whose destination is the
* current location.
*/
public void offloadPassenger()
{
}
}

View File

@@ -0,0 +1,17 @@
#BlueJ class context
comment0.params=company\ location
comment0.target=Taxi(TaxiCompany,\ Location)
comment0.text=\n\ Constructor\ for\ objects\ of\ class\ Taxi\n\ @param\ company\ The\ taxi\ company.\ Must\ not\ be\ null.\n\ @param\ location\ The\ vehicle's\ starting\ point.\ Must\ not\ be\ null.\n\ @throws\ NullPointerException\ If\ company\ or\ location\ is\ null.\n
comment1.params=
comment1.target=boolean\ isFree()
comment1.text=\n\ Is\ the\ taxi\ free?\n\ @return\ Whether\ or\ not\ this\ taxi\ is\ free.\n
comment2.params=location
comment2.target=void\ setPickupLocation(Location)
comment2.text=\n\ Receive\ a\ pickup\ location.\ This\ becomes\ the\n\ target\ location.\n\ @param\ location\ The\ pickup\ location.\n
comment3.params=passenger
comment3.target=void\ pickup(Passenger)
comment3.text=\n\ Receive\ a\ passenger.\n\ Set\ their\ destination\ as\ the\ target\ location.\n\ @param\ passenger\ The\ passenger.\n
comment4.params=
comment4.target=void\ offloadPassenger()
comment4.text=\n\ Offload\ the\ passenger.\n
numComments=5

View File

@@ -0,0 +1,57 @@
/**
* A taxi is able to carry a single passenger.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class Taxi extends Vehicle
{
/**
* Constructor for objects of class Taxi
* @param company The taxi company. Must not be null.
* @param location The vehicle's starting point. Must not be null.
* @throws NullPointerException If company or location is null.
*/
public Taxi(TaxiCompany company, Location location)
{
super(company, location);
}
/**
* Is the taxi free?
* @return Whether or not this taxi is free.
*/
public boolean isFree()
{
return getTargetLocation() == null;
}
/**
* Receive a pickup location. This becomes the
* target location.
* @param location The pickup location.
*/
public void setPickupLocation(Location location)
{
setTargetLocation(location);
}
/**
* Receive a passenger.
* Set their destination as the target location.
* @param passenger The passenger.
*/
public void pickup(Passenger passenger)
{
setTargetLocation(passenger.getDestination());
}
/**
* Offload the passenger.
*/
public void offloadPassenger()
{
clearTargetLocation();
}
}

View File

@@ -0,0 +1,17 @@
#BlueJ class context
comment0.params=
comment0.target=TaxiCompany()
comment0.text=\n\ Constructor\ for\ objects\ of\ class\ TaxiCompany\n
comment1.params=passenger
comment1.target=boolean\ requestPickup(Passenger)
comment1.text=\n\ Request\ a\ pickup\ for\ the\ given\ passenger.\n\ @param\ passenger\ The\ passenger\ requesting\ a\ pickup.\n\ @return\ Whether\ a\ free\ vehicle\ is\ available.\n
comment2.params=vehicle
comment2.target=void\ arrivedAtPickup(Vehicle)
comment2.text=\n\ A\ vehicle\ has\ arrived\ at\ a\ pickup\ point.\n\ @param\ vehicle\ The\ vehicle\ at\ the\ pickup\ point.\n
comment3.params=vehicle\ passenger
comment3.target=void\ arrivedAtDestination(Vehicle,\ Passenger)
comment3.text=\n\ A\ vehicle\ has\ arrived\ at\ a\ passenger's\ destination.\n\ @param\ vehicle\ The\ vehicle\ at\ the\ destination.\n\ @param\ passenger\ The\ passenger\ being\ dropped\ off.\n
comment4.params=
comment4.target=Vehicle\ scheduleVehicle()
comment4.text=\n\ Find\ a\ free\ vehicle,\ if\ any.\n\ @return\ A\ free\ vehicle,\ or\ null\ if\ there\ is\ none.\n
numComments=5

View File

@@ -0,0 +1,74 @@
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;
/**
* Model the operation of a taxi company, operating different
* types of vehicle.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public class TaxiCompany
{
private List<Vehicle> vehicles;
/**
* Constructor for objects of class TaxiCompany
*/
public TaxiCompany()
{
vehicles = new LinkedList<>();
}
/**
* Request a pickup for the given passenger.
* @param passenger The passenger requesting a pickup.
* @return Whether a free vehicle is available.
*/
public boolean requestPickup(Passenger passenger)
{
Vehicle vehicle = scheduleVehicle();
if(vehicle != null) {
vehicle.setPickupLocation(passenger.getPickupLocation());
return true;
}
else {
return false;
}
}
/**
* A vehicle has arrived at a pickup point.
* @param vehicle The vehicle at the pickup point.
*/
public void arrivedAtPickup(Vehicle vehicle)
{
}
/**
* A vehicle has arrived at a passenger's destination.
* @param vehicle The vehicle at the destination.
* @param passenger The passenger being dropped off.
*/
public void arrivedAtDestination(Vehicle vehicle,
Passenger passenger)
{
}
/**
* Find a free vehicle, if any.
* @return A free vehicle, or null if there is none.
*/
private Vehicle scheduleVehicle()
{
Iterator<Vehicle> it = vehicles.iterator();
while(it.hasNext()) {
Vehicle vehicle = it.next();
if(vehicle.isFree()) {
return vehicle;
}
}
return null;
}
}

View File

@@ -0,0 +1,20 @@
#BlueJ class context
comment0.params=
comment0.target=TaxiTest()
comment0.text=\n\ Default\ constructor\ for\ test\ class\ TaxiTest\n
comment1.params=
comment1.target=void\ setUp()
comment1.text=\n\ Create\ a\ taxi.\n\n\ Called\ before\ every\ test\ case\ method.\n
comment2.params=
comment2.target=void\ tearDown()
comment2.text=\n\ Tears\ down\ the\ test\ fixture.\n\n\ Called\ after\ every\ test\ case\ method.\n
comment3.params=
comment3.target=void\ testCreation()
comment3.text=\n\ Test\ creation\ and\ the\ initial\ state\ of\ a\ taxi.\n
comment4.params=
comment4.target=void\ testPickup()
comment4.text=\n\ Test\ that\ a\ taxi\ is\ no\ longer\ free\ after\ it\ has\n\ picked\ up\ a\ passenger.\n
comment5.params=
comment5.target=void\ testOffload()
comment5.text=\n\ Test\ that\ a\ taxi\ becomes\ free\ again\ after\ offloading\n\ a\ passenger.\n
numComments=6

View File

@@ -0,0 +1,81 @@
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* The test class TaxiTest.
*
* @author (your name)
* @version (a version number or a date)
*/
public class TaxiTest
{
private Taxi taxi;
/**
* Default constructor for test class TaxiTest
*/
public TaxiTest()
{
}
/**
* Create a taxi.
*
* Called before every test case method.
*/
@Before
public void setUp()
{
TaxiCompany company = new TaxiCompany();
Location taxiLocation = new Location();
taxi = new Taxi(company, taxiLocation);
}
/**
* Tears down the test fixture.
*
* Called after every test case method.
*/
@After
public void tearDown()
{
}
/**
* Test creation and the initial state of a taxi.
*/
@Test
public void testCreation()
{
assertEquals(true, taxi.isFree());
}
/**
* Test that a taxi is no longer free after it has
* picked up a passenger.
*/
@Test
public void testPickup()
{
Location pickup = new Location();
Location destination = new Location();
Passenger passenger = new Passenger(pickup, destination);
taxi.pickup(passenger);
assertEquals(false, taxi.isFree());
}
/**
* Test that a taxi becomes free again after offloading
* a passenger.
*/
@Test
public void testOffload()
{
testPickup();
taxi.offloadPassenger();
assertEquals(true, taxi.isFree());
}
}

View File

@@ -0,0 +1,38 @@
#BlueJ class context
comment0.params=company\ location
comment0.target=Vehicle(TaxiCompany,\ Location)
comment0.text=\n\ Constructor\ of\ class\ Vehicle\n\ @param\ company\ The\ taxi\ company.\ Must\ not\ be\ null.\n\ @param\ location\ The\ vehicle's\ starting\ point.\ Must\ not\ be\ null.\n\ @throws\ NullPointerException\ If\ company\ or\ location\ is\ null.\n
comment1.params=
comment1.target=void\ notifyPickupArrival()
comment1.text=\n\ Notify\ the\ company\ of\ our\ arrival\ at\ a\ pickup\ location.\n
comment10.params=location
comment10.target=void\ setTargetLocation(Location)
comment10.text=\n\ Set\ the\ required\ target\ location.\n\ @param\ location\ Where\ to\ go.\ Must\ not\ be\ null.\n\ @throws\ NullPointerException\ If\ location\ is\ null.\n
comment11.params=
comment11.target=void\ clearTargetLocation()
comment11.text=\n\ Clear\ the\ target\ location.\n
comment2.params=passenger
comment2.target=void\ notifyPassengerArrival(Passenger)
comment2.text=\n\ Notify\ the\ company\ of\ our\ arrival\ at\ a\n\ passenger's\ destination.\n\ @param\ passenger\ The\ passenger\ who\ has\ arrived.\n
comment3.params=location
comment3.target=void\ setPickupLocation(Location)
comment3.text=\n\ Receive\ a\ pickup\ location.\n\ How\ this\ is\ handled\ depends\ on\ the\ type\ of\ vehicle.\n\ @param\ location\ The\ pickup\ location.\n
comment4.params=passenger
comment4.target=void\ pickup(Passenger)
comment4.text=\n\ Receive\ a\ passenger.\n\ How\ this\ is\ handled\ depends\ on\ the\ type\ of\ vehicle.\n\ @param\ passenger\ The\ passenger\ being\ picked\ up.\n
comment5.params=
comment5.target=boolean\ isFree()
comment5.text=\n\ @return\ Whether\ or\ not\ this\ vehicle\ is\ free.\n
comment6.params=
comment6.target=void\ offloadPassenger()
comment6.text=\n\ Offload\ any\ passengers\ whose\ destination\ is\ the\n\ current\ location.\n
comment7.params=
comment7.target=Location\ getLocation()
comment7.text=\n\ Get\ the\ location.\n\ @return\ Where\ this\ vehicle\ is\ currently\ located.\n
comment8.params=location
comment8.target=void\ setLocation(Location)
comment8.text=\n\ Set\ the\ current\ location.\n\ @param\ location\ Where\ it\ is.\ Must\ not\ be\ null.\n\ @throws\ NullPointerException\ If\ location\ is\ null.\n
comment9.params=
comment9.target=Location\ getTargetLocation()
comment9.text=\n\ Get\ the\ target\ location.\n\ @return\ Where\ this\ vehicle\ is\ currently\ headed,\ or\ null\n\ \ \ \ \ \ \ \ \ if\ it\ is\ idle.\n
numComments=12

View File

@@ -0,0 +1,133 @@
/**
* Capture outline details of a vehicle.
*
* @author David J. Barnes and Michael Kölling
* @version 2016.02.29
*/
public abstract class Vehicle
{
private TaxiCompany company;
// Where the vehicle is.
private Location location;
// Where the vehicle is headed.
private Location targetLocation;
/**
* Constructor of class Vehicle
* @param company The taxi company. Must not be null.
* @param location The vehicle's starting point. Must not be null.
* @throws NullPointerException If company or location is null.
*/
public Vehicle(TaxiCompany company, Location location)
{
if(company == null) {
throw new NullPointerException("company");
}
if(location == null) {
throw new NullPointerException("location");
}
this.company = company;
this.location = location;
targetLocation = null;
}
/**
* Notify the company of our arrival at a pickup location.
*/
public void notifyPickupArrival()
{
company.arrivedAtPickup(this);
}
/**
* Notify the company of our arrival at a
* passenger's destination.
* @param passenger The passenger who has arrived.
*/
public void notifyPassengerArrival(Passenger passenger)
{
company.arrivedAtDestination(this, passenger);
}
/**
* Receive a pickup location.
* How this is handled depends on the type of vehicle.
* @param location The pickup location.
*/
public abstract void setPickupLocation(Location location);
/**
* Receive a passenger.
* How this is handled depends on the type of vehicle.
* @param passenger The passenger being picked up.
*/
public abstract void pickup(Passenger passenger);
/**
* @return Whether or not this vehicle is free.
*/
public abstract boolean isFree();
/**
* Offload any passengers whose destination is the
* current location.
*/
public abstract void offloadPassenger();
/**
* Get the location.
* @return Where this vehicle is currently located.
*/
public Location getLocation()
{
return location;
}
/**
* Set the current location.
* @param location Where it is. Must not be null.
* @throws NullPointerException If location is null.
*/
public void setLocation(Location location)
{
if(location != null) {
this.location = location;
}
else {
throw new NullPointerException();
}
}
/**
* Get the target location.
* @return Where this vehicle is currently headed, or null
* if it is idle.
*/
public Location getTargetLocation()
{
return targetLocation;
}
/**
* Set the required target location.
* @param location Where to go. Must not be null.
* @throws NullPointerException If location is null.
*/
public void setTargetLocation(Location location)
{
if(location != null) {
targetLocation = location;
}
else {
throw new NullPointerException();
}
}
/**
* Clear the target location.
*/
public void clearTargetLocation()
{
targetLocation = null;
}
}

View File

@@ -0,0 +1,224 @@
#BlueJ package file
dependency1.from=PassengerSourceTest
dependency1.to=TaxiCompany
dependency1.type=UsesDependency
dependency10.from=TaxiTest
dependency10.to=Passenger
dependency10.type=UsesDependency
dependency11.from=TaxiCompany
dependency11.to=Passenger
dependency11.type=UsesDependency
dependency12.from=TaxiCompany
dependency12.to=Vehicle
dependency12.type=UsesDependency
dependency13.from=Passenger
dependency13.to=Location
dependency13.type=UsesDependency
dependency14.from=PassengerSource
dependency14.to=TaxiCompany
dependency14.type=UsesDependency
dependency15.from=PassengerSource
dependency15.to=Passenger
dependency15.type=UsesDependency
dependency16.from=PassengerSource
dependency16.to=Location
dependency16.type=UsesDependency
dependency17.from=PassengerTest
dependency17.to=Location
dependency17.type=UsesDependency
dependency18.from=Vehicle
dependency18.to=TaxiCompany
dependency18.type=UsesDependency
dependency19.from=Vehicle
dependency19.to=Location
dependency19.type=UsesDependency
dependency2.from=Taxi
dependency2.to=TaxiCompany
dependency2.type=UsesDependency
dependency20.from=Vehicle
dependency20.to=Passenger
dependency20.type=UsesDependency
dependency21.from=TaxiCompany
dependency21.to=Taxi
dependency21.type=UsesDependency
dependency22.from=TaxiCompany
dependency22.to=Location
dependency22.type=UsesDependency
dependency23.from=PassengerSourceTest
dependency23.to=PassengerSource
dependency23.type=UsesDependency
dependency24.from=TaxiTest
dependency24.to=Taxi
dependency24.type=UsesDependency
dependency25.from=PassengerTest
dependency25.to=Passenger
dependency25.type=UsesDependency
dependency3.from=Taxi
dependency3.to=Location
dependency3.type=UsesDependency
dependency4.from=Taxi
dependency4.to=Passenger
dependency4.type=UsesDependency
dependency5.from=Shuttle
dependency5.to=TaxiCompany
dependency5.type=UsesDependency
dependency6.from=Shuttle
dependency6.to=Location
dependency6.type=UsesDependency
dependency7.from=Shuttle
dependency7.to=Passenger
dependency7.type=UsesDependency
dependency8.from=TaxiTest
dependency8.to=TaxiCompany
dependency8.type=UsesDependency
dependency9.from=TaxiTest
dependency9.to=Location
dependency9.type=UsesDependency
objectbench.height=76
objectbench.width=806
package.editor.height=548
package.editor.width=698
package.editor.x=70
package.editor.y=80
package.numDependencies=25
package.numTargets=10
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.editor.height=571
readme.editor.width=770
readme.editor.x=53
readme.editor.y=23
target1.editor.height=700
target1.editor.width=900
target1.editor.x=53
target1.editor.y=23
target1.height=50
target1.name=Vehicle
target1.naviview.expanded=true
target1.showInterface=false
target1.type=AbstractTarget
target1.typeParameters=
target1.width=80
target1.x=490
target1.y=100
target10.editor.height=730
target10.editor.width=748
target10.editor.x=53
target10.editor.y=60
target10.height=50
target10.name=Location
target10.naviview.expanded=true
target10.showInterface=false
target10.type=ClassTarget
target10.typeParameters=
target10.width=80
target10.x=110
target10.y=430
target2.editor.height=700
target2.editor.width=900
target2.editor.x=53
target2.editor.y=23
target2.height=50
target2.name=TaxiCompany
target2.naviview.expanded=true
target2.showInterface=false
target2.type=ClassTarget
target2.typeParameters=
target2.width=100
target2.x=190
target2.y=30
target3.editor.height=735
target3.editor.width=784
target3.editor.x=117
target3.editor.y=75
target3.height=50
target3.name=TaxiTest
target3.naviview.expanded=true
target3.showInterface=false
target3.type=UnitTestTargetJunit4
target3.typeParameters=
target3.width=80
target3.x=430
target3.y=200
target4.editor.height=720
target4.editor.width=842
target4.editor.x=53
target4.editor.y=63
target4.height=50
target4.name=PassengerSourceTest
target4.naviview.expanded=true
target4.showInterface=false
target4.type=UnitTestTargetJunit4
target4.typeParameters=
target4.width=150
target4.x=50
target4.y=100
target5.association=TaxiTest
target5.editor.height=700
target5.editor.width=900
target5.editor.x=53
target5.editor.y=23
target5.height=50
target5.name=Taxi
target5.naviview.expanded=true
target5.showInterface=false
target5.type=ClassTarget
target5.typeParameters=
target5.width=80
target5.x=400
target5.y=230
target6.editor.height=726
target6.editor.width=907
target6.editor.x=158
target6.editor.y=83
target6.height=50
target6.name=PassengerTest
target6.naviview.expanded=true
target6.showInterface=false
target6.type=UnitTestTargetJunit4
target6.typeParameters=
target6.width=110
target6.x=300
target6.y=310
target7.association=PassengerTest
target7.editor.height=700
target7.editor.width=900
target7.editor.x=53
target7.editor.y=23
target7.height=50
target7.name=Passenger
target7.naviview.expanded=true
target7.showInterface=false
target7.type=ClassTarget
target7.typeParameters=
target7.width=90
target7.x=270
target7.y=340
target8.association=PassengerSourceTest
target8.editor.height=700
target8.editor.width=900
target8.editor.x=53
target8.editor.y=23
target8.height=50
target8.name=PassengerSource
target8.naviview.expanded=true
target8.showInterface=false
target8.type=ClassTarget
target8.typeParameters=
target8.width=130
target8.x=20
target8.y=130
target9.editor.height=707
target9.editor.width=811
target9.editor.x=53
target9.editor.y=60
target9.height=50
target9.name=Shuttle
target9.naviview.expanded=false
target9.showInterface=false
target9.type=ClassTarget
target9.typeParameters=
target9.width=80
target9.x=570
target9.y=190