FMIN110 - GMIN327 - 18/01/2013 - 08h30
Examen Programmation par objets (Java) - 2h
Tous documents autorisés
Nous étudions quelques éléments d’un logiciel de suivi pour une exploitation agricole. Nous
verrons successivement la notion de parcelle agricole, d’activité (semis, traitement, récolte, etc.)
pratiquée sur une parcelle. Une exploitation disposera d’une liste d’activités pratiquées sur des
parcelles.
1 Parcelle
Une parcelle est décrite par ses coordonnées cadastrales (une section composée d’un ou deux
caractères et un numéro de parcelle entier), une superficie en hectares et le nom de son proprié-
taire. Vous trouverez ci-dessous les premiers éléments de la classe décrivant les parcelles. Tous
les accesseurs sont supposés exister.
public class Parcelle {
private String section;
private int numero;
private double superficie;
private String nomProprietaire;
public Parcelle() {}
public Parcelle(String section, int numero, double superficie,
String nomProprietaire) {
this.section = section;
this.numero = numero;
this.superficie = superficie;
this.nomProprietaire = nomProprietaire;
}
public String getSection() {
return section;
}
Advertisement
public void setSection(String section) {
this.section = section;
}
..........................
}
Question 1 Dans la classe Parcelle, modifiez l’accesseur setSection : si le paramètre est bien
composé d’un ou deux caractères, il est affecté à l’attribut, sinon un message d’erreur est affiché
et la valeur "zzz" est affectée à l’attribut.
Question 2 Ecrivez dans la classe Parcelle un main dans lequel vous créez une parcelle p1
avec le constructeur sans paramètre, puis une parcelle p2 qui a pour section "AB", pour numéro
234, une superficie de 3 hectares et un propriétaire qui s’appelle "Maximilien". Enfin modifiez la
section de p1 de manière à ce que ce soit la chaîne "B".
Examen FMIN110 - GMIN327
18/01/2013 - 08h30
Examen Programmation par objets (Java) - 2h
Tous documents autorisés
2 Activités de culture
Nous étudions maintenant les activités agricoles, en nous limitant à une description simplifiée
de quelques activités liées à la culture. Une activité de culture est supposée pratiquée sur une
parcelle. On ne demandera pas, dans le cadre limité de cet examen, que la parcelle dispose de la
liste des activités qui y sont pratiquées. L’activité a un nom (semis de luzerne, traitement anti-
phylloxera, récolte de blé, etc.), un calendrier qui donne les semaines où l’activité est pratiquée
(ce calendrier est représenté par un tableau de 52 booléens) et un revenu annuel. Un embryon
de classe vous est donné ci-dessous.
public class ActiviteCulture {
private String nom;
private Parcelle parcelle;
private boolean[] calendrier = new boolean[52];
Advertisement
private double revenuAnnuel;
public ActiviteCulture() {}
public ActiviteCulture(String nom, Parcelle parcelle, boolean[] calendrier,
double revenuAnnuel) {
this.nom = nom;
this.parcelle = parcelle;
this.calendrier = calendrier;
this.revenuAnnuel = revenuAnnuel;
}
Question 3 On veut interdire de créer des instances propres de cette classe ActiviteCulture :
qu’ajoutez-vous au code pour représenter cette information ?
Une activité de traitement est décrite par un nom de produit, si le produit est admis en agriculture
biologique, un coût hebdomadaire forfaitaire à l’hectare pour la main d’oeuvre et le matériel (le
même pour toute activité de traitement), une quantité hebdomadaire de produit à épandre par
hectare (en litres/hectare) et le prix d’un litre de produit (ce dernier attribut sera supposé
s’appeler prixLitreProduit.
Question 4 Ecrivez les éléments suivant pour une classe ActiviteTraitement, sous-classe
de ActiviteCulture : la première ligne correspondant à la déclaration, le(s) attribut(s), le(s)
constructeur(s). Vous proposerez un constructeur sans paramètres et un constructeur avec des
paramètres destinés à initialiser les attributs. N’écrivez pas les accesseurs, mais ils sont supposés
exister pour la suite.
Question 5 Ecrivez dans les classes représentant les activités une méthode
double coutSemaineDePratique() qui retourne le coût d’une semaine de pratique de l’activité.
Cette méthode sera abstraite dans la classe ActiviteCulture. Pour une activité de traitement, le
coût d’une semaine de pratique est calculé par cumul du coût hebdomadaire forfaitaire à l’hectare
pour la main d’oeuvre et le matériel, du prix pour le produit de traitement, et d’une taxe de 0,5
euros par litre de produit s’il n’est pas admis en agriculture biologique (au titre de la dépollution).
Question 6 Ecrivez dans la classe ActiviteCulture, une méthode donnant le coût de l’activité
Advertisement
pour une semaine i donnée ( i est un paramètre) : il est de 0 si l’activité n’est pas pratiquée en
semaine i et vaut coutSemaineDePratique si l’activité est pratiquée en semaine i.
Question 7 Ecrivez dans la classe ActiviteCulture, une méthode donnant le coût annuel de
l’activité.
Question 8 Ecrivez dans la classe ActiviteCulture, une méthode boolean rentable() re-
tournant vrai si l’activité est rentable sur une année. C’est le cas si le coût annuel de l’activité
est inférieur au revenu annuel.
Examen FMIN110 - GMIN327
2
18/01/2013 - 08h30
Examen Programmation par objets (Java) - 2h
Tous documents autorisés
3 Exploitation
Une exploitation est décrite ici par un nom et une liste d’activités. Cette dernière est vide lors
de la création d ?une exploitation et on peut y ajouter une par une des activités.
Question 9 Ecrivez les éléments suivant pour une classe Exploitation : la première ligne cor-
respondant à la déclaration, le(s) attribut(s), le(s) constructeur(s). Vous proposerez uniquement
un constructeur sans paramètres. N’écrivez pas les accesseurs, mais ils sont supposés exister pour
la suite.
Question 10 Ecrivez dans la classe Exploitation une méthode permettant d’ajouter une acti-
vité passée en paramètres (si elle n’est pas déjà présente).
Question 11 Ecrivez dans la classe Exploitation une méthode coutAnnuel retournant le coût
annuel total (de toutes les activités pratiquées sur l’exploitation).
Question 12 Ecrivez dans la classe Exploitation une méthode activitesRentables retour-
nant la liste des activités rentables de l’exploitation.
4 Question sur l’héritage
Question 13 Etant données les déclarations de classes suivantes :
abstract
Advertisement
public class
A{
public abstract void m2();
public void m1(){System.out.println("m1 dans A"); m2();}
}
public class B extends A{
public void m2(){System.out.println("m2 dans B");}
}
public class C extends B{
public void m1(){System.out.println("m1 dans C"); super.m1();}
}
public class D extends C{
public void m2(){System.out.println("m2 dans D"); super.m2();}
}
Qu’affichera le main de LiaisonDynamique lors de son exécution ?
public class LiaisonDynamique {
public static void main(String[] args) {
D instD = new D();
instD.m1();
}
}
Examen FMIN110 - GMIN327
3
18/01/2013 - 08h30