User interface language: English | Español

Date November 2017 Marks available 3 Reference code 17N.2.SL.TZ0.10
Level SL Paper 2 Time zone no time zone
Command term Construct Question number 10 Adapted from N/A

Question

A restaurant uses an object-oriented program to manage the cost of the food and drink consumed by customers. Everytime a table is occupied a Payment object is instantiated which will contain details of the items ordered. As each item is ordered, a FoodItem or a DrinkItem object is added to the Payment object as appropriate.

public class Payment
{
private FoodItem[] fi = new FoodItem[100];
private int fiCount;
private static double foodTax = 0.2; // 20 % sales tax added to
// all food prices
private DrinkItem[] di = new DrinkItem[100];
private int diCount;
private static double drinkTax = 0.1; // 10 % sales tax added to
// all drink prices
public Payment()
{
fiCount = 0;
diCount = 0;
}

public
DrinkItem getDi(int x)
{
return di[x];
}

// all other accessor and mutator methods are included

// addFoodItem() – this method adds a new FoodItem object
// addDrinkItem() – this method adds a new DrinkItem object

public static double findPrice(Item[] pl, String c)
{ //code missing }

// calculateBill() – This method returns the bill (the total value of
// the items consumed for a particular table)
}

public class FoodItem
{
private String itemCode;
private int quantity;

public FoodItem(String x, int y)
{
itemCode = x;
quantity = y;
}
// all accessor and mutator methods are included
}
The DrinkItem class is defined in a similar way.

Whenever a Payment object is instantiated, the variables fiCount and diCount are initialized to 0 through the code in the constructor.

Outline an alternative method of initializing these variables that would not require the use of the code in the constructor.

[2]
a.

State the implication of the use of the term static in the Payment class.

[2]
b.

With reference to two examples from the classes in the resource, explain the benefits gained by the use of different data types.

[4]
c.

Describe the purpose of the following statement:

private FoodItem[] fi = new FoodItem[100]

[3]
d.

The Payment class method addFoodItem() is passed a FoodItem object as a parameter.

Construct the method addFoodItem().

[3]
e.

Markscheme

Award [1] for identifying the code and [1] for identifying the new position.
private int fiCount = 0 and private int diCount = 0;
In the variable/attribute section of the class and not in the constructor);

a.

EITHER
The values of these (static) variables;
Are the same for all objects;
They belong to the class (not to the objects);
And are only created/declared once;
Note: Do not accept “cannot be changed”.

OR
The static methods;
Are class methods (not object methods);
Are independent of the objects in the class;

b.

Award [2 × 2] for each clear example. Only award [2] for an example if the benefit is clearly shown;

Having different data types allow different operations to be carried out depending upon the type;
e.g.
Calculations in the integer “quantity” variable;
which are not possible for a String;

Double instead of integer allows the use of decimals;
which mirrors real-life scenarios/allows more precise calculations;

Using an array (of objects);
Allows individual items to be accessed/processed more easily;

Memory usage can be reduced;
e.g. “fiCount” takes up less space as an integer than it would as a double (assuming it’s just a number);

c.

The variable fi is declared as an array of FoodItem objects / of type FoodItem;
With (a maximum of) 100 values;
It cannot be directly accessed/it is encapsulated within the Payment class;

d.

Award [1] for each correct line of code.

public void addFoodItem(FoodItem f)
{
fi[fiCount] = f;
fiCount++;
}
e.

Examiners report

[N/A]
a.
[N/A]
b.
[N/A]
c.
[N/A]
d.
[N/A]
e.

Syllabus sections

Option D: Object-oriented programming » D.3 Program development
Show 45 related questions
Option D: Object-oriented programming

View options