Objectives
The objective of this assessment is for you to demonstrate your ability to design and implement an OO system consisting of a set of Java classes and a client program. In particular:
1. To design and implement classes with suitable fields, constructors, accessor methods, and modifier methods.
2. To conform to the standard conventions of Java.
3. To implement classes that are associated by inheritance, delegation, composition and aggregation.
4. To write a client application that uses your classes to show that they function correctly.Foreword: You are required to build a Java application that provides a basis for storing and processing details related to a Formula 1 Championship. Although there may be similarities to a real
Formula 1 Championship, and therefore it is logical that you may draw inspiration from this to assist your understanding, this scenario is intended to be both hypothetical and fictional. To this extent, this specification should be strictly followed and a submission that does not resemble the provided specification will not receive any credit, where it does not meet the intended design or programming logic.
The Scenario: A Formula 1 Championship comprises of several teams. Each team has two drivers and many mechanics. Drivers and mechanics are both team members and therefore have a common set of details (name and address) about them stored, as well as their annual salary. A mechanic has a particular role within the team, e.g. basic engineer, data strategist, driver support, etc. They also are either based back at the factory or travel to races. A driver has a number of points, based upon their race results. This said, races and results are beyond the scope of the current system release and therefore hypothetical points may be added to a driver at any time.As well as having two drivers and a list of mechanics on their records, a team will also have a number of points, based upon the sum of the points of their two drivers, e.g. driver 1 has 20 points and driver 2 has 76 points then the team has 96 points. A team should be able to calculate their points at any time. The size of a team is based on the number of mechanics, as well as their 2 drivers.
A championship should be ordered based on teams and the points they hold, with the team in 1st position being the one that holds the most points.
Technical Information: The UML class diagram (overleaf) specifies all required classes, interfaces and their relationships. It also lists all fields, constructors and methods that you are required to implement. You should strictly follow this specification. Note that classes Championship and Team both implement the Iterable interface, whilst class Team implements the Comparable interface. The compareTo(…) method in the Team class should compare two teams based on their points – this will assist with sorting teams in the Championship class. It is important to ensure that both teams’ points are calculated prior to comparing them. The equals(…) methods you are required to override in the TeamMember and Details classes, should compare each field within those respective classes. A toString() method should be present in each class and output the current value stored in each of the fields.
Use Cases: You should have a test class, with a main method, that should complete the following use cases for the “Formula 1 Championship System” to show it works:
1. Create 5 teams, each populated with 2 drivers and a minimum of 4 mechanics.
2. Add these 5 teams to a championship, calculate each team’s points and order them on this.
3. Output in order the championship standings including team name, and points, as well as the full name of each driver within the team and their respective points.
4. Calculate the total combined salary for all mechanics and drivers belonging to the current championship leading team, and output this figure, along with the number of team members.