1
2
//TODO 1 (0,5 pt) : Complétez l'entête de la classe Personne pour permettre
l'héritage pour les classes Passenger et Pilot seulement.
// 0,25pt sealed + 0,25pt permits
public sealed class Person permits Passenger, Pilot {
private String name;
private int age;
//TODO 2 (0,5 pt) : Implémentez le constructeur de la classe.
public Person(String name, int age) {
[Link] = name;
[Link] = age;
}
//TODO 3 (1 pt) : Implémentez les getters et setters des attributs name et
age.
// 0,25 par méthode
public String getName() {
return name;
}
public void setName(String name) {
[Link] = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
[Link] = age;
}
}
3
import [Link];
//TODO 4 (1 pt) : Complétez l'entête de la classe Passenger afin qu'elle
hérite de la classe Person et qu'elle puisse être étendue.
// 0,5pt non-sealed 0,5pt extends
public non-sealed class Passenger extends Person {
private int cin;
//TODO 5 (1 pt) : Implémentez le constructeur de la classe.
public Passenger(int cin, String name, int age) {
super(name, age);
[Link] = cin;
}
public int getCin() {
return cin;
}
public void setCin(int cin) {
[Link] = cin;
}
@Override
public String toString() {
return "Passenger{" +
"cin=" + cin +
"} " + [Link]();
}
//TODO 6 (1 pt) : Implémentez la méthode nécessaire pour tester l’égalité
entre 2 passagers selon leurs noms et leurs cin.
// Acceptez toute variation de cette méthode
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Passenger passenger)) return false;
return getCin() == [Link]() && [Link](getName(),
[Link]());
}
//TODO 7 (1 pt) : Implémentez la méthode nécessaire pour garantir
l’unicité des passagers selon leurs noms et leurs cin.
// Acceptez toute variation de cette méthode
@Override
public int hashCode() {
return [Link](getCin(), getName());
}
}
4
//TODO 8 (1 pt) : Complétez l'entête de la classe Pilot pour qu'elle hérite
de la classe Person et ne puisse pas être étendue.
// 0,5pt final + 0,5pt extends
public final class Pilot extends Person {
private int experience;
private int salary;
private int badgeNumber;
public Pilot(String name, int age, int experience, int salary, int
badgeNumber) {
super(name, age);
[Link] = experience;
[Link] = salary;
[Link] = badgeNumber;
}
}
5
public class Flight {
private Set<Passenger> passengers;
private String flightNumber;
private String departureCity;
private String arrivalCity;
private int distance;
public Flight(String flightNumber, String departureCity, String
arrivalCity, int distance) {
[Link] = flightNumber;
[Link] = departureCity;
[Link] = arrivalCity;
[Link] = distance;
passengers = new HashSet<>();
}
//TODO 9 (0,5 pt) : Complétez la méthode « addPassenger » qui permet
d’ajouter un passager au vol.
public void addPassenger(Passenger passenger) {
[Link](passenger);
}
//TODO 10 (0,5 pt) : Complétez la méthode « removePassenger » permet de
retirer un passager du vol.
public void removePassenger(Passenger passenger) {
[Link](passenger);
}
//TODO 11 (1 pt) : Implémenter la méthode « checkIfBabiesOnBoard » qui
permet de vérifier s'il y a des bébés (moins de 2 ans) à bord du vol. (Avec
l’API Stream)
// Acceptez toute variation de cette méthode avec Stream (noneMatch), 0
sinon
public boolean checkIfBabiesOnBoard() {
return [Link]().anyMatch(passenger -> [Link]() < 2);
}
}
6
public class Airport {
private String name;
private Map<Pilot, List<Flight>> flights;
public Airport(String name) {
[Link] = name;
[Link] = new HashMap<>();
}
//TODO 12 (1,5 pt) : Complétez la méthode « addFlight » qui permet d’ajouter un
vol d'un pilote donné à la liste des vols associés à ce pilote.
// Si le pilote n'a pas de vols existants, une nouvelle liste est créée et
associée au pilote avant d'ajouter le nouveau vol à la liste.
public void addFlight(Pilot pilot, Flight flight) {
List<Flight> flights = [Link](pilot); //0,25pt
if (flights == null) { //0,5pt
flights = new ArrayList<>(); //0,25pt
[Link](pilot, flights); //0,25pt
}
[Link](flight); //0,25pt
}
//TODO 13 (1,5 pt) : Complétez la méthode « sortFlightsByPilotName » qui permet
de trier les vols en fonction du nom du pilote, dans l'ordre croissant.
public Map<Pilot, List<Flight>> sortFlightsByPilotName() {
Map<Pilot, List<Flight>> sortedFlights = new TreeMap<>((p1, p2) ->
[Link]().compareTo([Link]())); //0,25pt Instanciation TreeMap + 0,75pt
Comparator
[Link]([Link]); //0,25pt
return sortedFlights; //0,25pt
}
//TODO 14 (2 pt) : Complétez la méthode « printFlightsLongerThan5000KM » qui
permet d’afficher tous les vols d'une longueur supérieure à 5000 kilomètres.
// Acceptez toute variation de cette méthode même avec Stream
public void printFlightsLongerThan5000KM() {
for ([Link]<Pilot, List<Flight>> entry : [Link]()) {
Pilot pilot = [Link]();
List<Flight> flights = [Link]();
for (Flight flight : flights) {
if ([Link]() > 5000) {
[Link](pilot + " " + flight);
}
}
}
}
//TODO 15 (2 pt) : Complétez la méthode « countFlightsWithExperiencedPilots » qui
compte le nombre total de vols dont les pilotes sont expérimentés.
// Un pilote expérimenté a plus de 5 ans d'expérience. (Avec l’API Stream)
// Acceptez toute variation de cette méthode avec Stream, 0 sinon
public int countFlightsWithExperiencedPilots() {
return [Link]().stream().filter(entry -> [Link]()
.getExperience() > 5).mapToInt(entry -> [Link]().size()).sum();
}
}