Practice D. Object-oriented programming (OOP) with authentic IB Computer Science (CS) exam questions for both SL and HL students. This question bank mirrors Paper 1, 2, 3 structure, covering key topics like programming concepts, algorithms, and data structures. Get instant solutions, detailed explanations, and build exam confidence with questions in the style of IB examiners.
Full details of the customers are stored as objects of the Customer class. This class is partially shown below:
public class Customer
{
private String memberId;
private String email; // email address (assume only 1 per customer)
public Customer(String a, String b)
{
memberId = a;
email = b;
}
public String getMemberId()
{
return memberId;
}
public String getEmail()
{
return email;
}
}The objects can be accessed through the linked list allCustomers, which is declared in the main (driver) class as follows:
LinkedList<Customer> allCustomers = new LinkedList<Customer>();
The loyalty points for each customer are stored in objects of the Points class. These objects are stored in the array allPoints, which is declared as follows:
Points[] allPoints = new Points[5000];
The Points class includes the following methods:
public String getMemberId(): returns the member ID.public boolean isGold(): returns true if the member is a Gold member, false otherwise.Outline why a linked list structure has been chosen for allCustomers.
Construct the method goldMails() that will return an ArrayList containing the email addresses of all current "Gold" members. You should make use of any previously defined methods.
A smartphone app is being developed to manage tasks and reminders. The app uses classes such as Task, Reminder, and Event, which inherit from a base class ScheduleItem.
Define the term polymorphism.
Explain one advantage of using polymorphism in this app.
Describe two advantages of using libraries of objects in the development of this app.
A generic Event class is defined as follows:
class Event {
private String eventID;
private int numberOfRaces;
private Race[] races;
private Race finals;
public Event(String ID, int numberOfRaces) {
eventID = ID;
races = new Race[numberOfRaces];
for (int i = 0; i < numberOfRaces; i++) {
races[i] = new Race();
}
finals = new Race();
}
public void addSwimmers() {
// fills the qualifying heats with swimmers
}
public void fillFinals() {
// fills the finals race with the best 8 from the qualifying heats
}
// more methods()
}The Event class above assumes that the event has more than 8 swimmers and requires qualifying heats. However, an event with less than 9 swimmers has no qualifying heats, so the original Event class was inherited by a new class FinalsOnlyEvent.
The same method identifier addSwimmers is used in both classes Race and Event.
Explain why this does not cause a conflict.
Outline two advantages of the OOP feature ‘‘inheritance’’.
Outline how method overriding can help to create the new class FinalsOnlyEvent.
An image processing software needs to perform operations on a collection of pixels.
Explain the advantages of using library collections like ArrayList or LinkedList in this context.
Construct code to add a Pixel to an ArrayList and iterate over all pixels to apply a filter.
Describe one situation where a LinkedList might be preferred over an ArrayList in this application.
An airline company is updating its reservation system, which includes classes like Seat, EconomySeat, and BusinessSeat. EconomySeat and BusinessSeat inherit from Seat.
Explain one advantage of polymorphism in this reservation system.
Explain two advantages of modularity in developing this system.
Define the term polymorphism.
In a text processing program, we need to count the occurrences of a specific character.
Construct code that uses a for loop to iterate through a string text and counts how many times the character 'e' appears.
Explain how the loop and selection statements work together in your code.
Define the term 'parameter variable' in the context of a method that performs this counting task.
A company provides car parking services in large cities and needs a computer system to keep track of the number of vehicles using its parking areas.
When a vehicle arrives, its registration plate is recorded on the system and it is allocated a number that identifies where it should park. When the vehicle leaves, that space is made available for other vehicles to use.
Vehicles are identified by their unique registration plate, which is an alphanumeric code of eight characters (e.g. X1234567). This is clearly displayed on the vehicle.
A programmer created the classes ParkingArea and Vehicle to model the above situation.
public class ParkingArea {
private Vehicle[] vehicles;
private String name;
ParkingArea(String name, int capacity) {
this.name = name;
if (capacity > 300) capacity = 300;
this.vehicles = new Vehicle[capacity];
}
String getName() {
return name;
}
public int getCapacity() {
return vehicles.length;
}
public int findVehicle(String reg) {
// find where the vehicle is located in the array and
// return the index; method body not yet written
}
}public class Vehicle {
private String registration;
private byte colour;
private boolean broken;
public final static byte BLACK = 1;
public final static byte WHITE = 2;
public final static byte BLUE = 3;
public final static byte RED = 4;
public final static byte GREEN = 5;
private final static double ADMIN_FEE = 3;
public Vehicle() {}
public Vehicle(String registration) {
this.registration = registration;
}
public Vehicle(String registration, byte colour) {
this.registration = registration;
this.colour = colour;
}
public void setBroken(boolean broken) {
this.broken = broken;
}
public void setColour(byte colour) {
this.colour = colour;
}
public boolean getBroken() {
return broken;
}
public String getRegistration() {
return registration;
}
public double pay(int hours) {
// code to return admin fee - only if applicable
}
}Construct code to create an instance of the Vehicle class that has a registration of X1234567.
Outline why it is necessary to use the keyword this in the setBroken method of the Vehicle class.
Construct code that sets the colour of the object created in part (1) as black.
Describe the relationship between the classes Vehicle and ParkingArea.
Outline one effect of using the modifier static when declaring a variable.
A hotel chain has a loyalty scheme in which customers are awarded 1000 points for each day they stay in one of their hotels. With these points, customers can achieve one of three status levels: Gold, Silver or Bronze. The level will determine the extra services to which they are entitled.
The total number of points collected during the current year will determine which of the three status levels they are assigned for the following year: For example only the points collected in 2018 will determine the status level for 2019.
Occasionally, new customers receive additional bonus points as part of a promotion.
The Points class keeps details of the points and status levels of each customer.
public class Points {
private String memberId; // id of the hotel customer
private int totalPoints; // this year's points
private int bonusPoints; // any bonus points given to this year's new member
private String statusNow; // current (this year's) status
private String statusNextYear; // following year's status
private Visits[] allVisits = new Visits[366]; // details of each visit during this year
private int y; // number of visits this year
public Points(String id) { // constructor for new member
memberId = id;
bonusPoints = 0;
y = 0;
statusNow = "Bronze";
}
// constructor for new member given bonus points (valid for current year only)
public Points(String id, int bp) {
memberId = id;
bonusPoints = bp; // multiples of 1000 - maximum number is 5000
y = 0;
statusNow = "Bronze";
}
// all the accessor and mutator methods are present but not shown
public Visits getAllVisits(int v) {
return allVisits[v];
}
public void addVisit(Visits v) { // adds a new Visit object to the array
allVisits[y] = v;
y = y + 1;
}
public boolean isGold() { /* code missing */ }
public void calculateTotalPoints() { /* code missing */ }
public int daysMissing() { /* code missing */ }
}The instance variables in the Points class are preceded by the modifier private. The choice of modifier affects the way in which these variables are accessed or used.
The customers will be assigned one of three levels for the following year (Gold, Silver or Bronze) depending upon the current year’s total points as follows:
In 2018, Tim became a member for the first time and was awarded a bonus of 1000 points. So far, in 2018, Tim has stayed three times at one of these hotels. The first visit lasted 2 days, the second visit lasted 1 day and the third visit lasted 6 days.
The different Points objects are stored in an array which is declared globally in the main (driver) class as follows:
Points[] allPoints = new Points[10000];
With the use of two examples other than private, outline how the choice of this modifier affects the way in which these variables are accessed or used.
With reference to the two methods with the same name in the Points class, explain the OOP feature that makes it possible to successfully implement either of these methods.
State the status level that Tim has been assigned, for 2019, following these visits.
State how an individual Points object can be identified using the allPoints array.
The attribute statusNow is assigned its correct value at the beginning of every year for existing members. It cannot be changed during the year.
Construct the method isGold() in the Points class, which will return whether the current status is "Gold".