Object Attributes Operations
Pump Fuel dispensed
Price
Hose status
Trigger status
Fuel type
Activate
Deactivate
Deliver fuel
Get fuel type
Set fuel type
Set maximum
Get hose status
Get trigger status
Card reader Card number
Card type
Credit limit
Read card
Print receipt
Fuel tank Current fuel level Add fuel
Remove fuel
Communication system Number dialled
Credit limit
Card status
Send card number
Return card status
System controller Card number
Card type
Max delivery
Price table
Fuel delivered
 
Price table Fuel prices Lookup
Amend price

The basic sequence of actions in the system controller is:

creditLimit = CardReader.readCard(cardNumber, cardType);
cardStatus = CommunicationsSystem.checkStatus(cardType, creditLimit);
// Actions taken when invalid card are not shown
if (cardStatus == OK)
{
	price = PriceTable.lookup(Pump.getFuelType());
	maxDelivery = creditLimit / price;
	Pump.setMaximum ( maxDelivery );

	while hose not removed or trigger off
		wait;

	Pump.activate();
	
	while trigger on and maxDelivery not reached
		fuelDelivered = Pump.deliverFuel();

	// Assume trigger goes off when car's tank is full.
	Pump.deactivate();

	FuelTank.remove(fuelDelivered);
	CardReader.printReceipt(fuelDelivered * price);	
}