Vous êtes sur la page 1sur 9

Corrigé Barème

Contrôle de connaissances 2011/2012


des étudiants de 2è année (EI2)

CSC4002 : Contrôle Final Session 2

Date : 29 Mars 2012 — Durée : 1H30

Coordonnateurs : Christian Bac et Denis Conan

Les seuls documents autorisés sont ceux distribués en cours / BE / TP et mis à disposition
sur le site Web du module, ainsi que vos notes personnelles.

Notes :
— le travail doit se faire individuellement ;
— n’oubliez pas d’indiquer votre nom sur chaque feuille rendue ;
— soyez concis et précis, et justifiez vos réponses par des commentaires appropriés ;
— soyez rigoureux dans la syntaxe JAVA ;
— veillez à rendre une copie propre et lisible.
CF2 2011–2012

1 Gestion de modules d’enseignement


L’objectif du système est d’informatiser la description des modules d’enseignement et le
suivi des présences des étudiants dans une école du type de la nôtre.

1.1 Description du système


Le système permet à un gérant de scolarité de gérer des modules découpés en activité
pédagogiques, de les associer à des groupes d’étudiants et de noter la présence des étudiants
pendant les séances de cours.
Les étudiants et les groupes ne sont pas gérés par ce système mais par une autre applica-
tion. Ils sont considérés déjà présents dans le système. Un étudiant est décrit par son nom,
son prénom et son numéro d’étudiant. Un groupe d’étudiants est décrit par son nom. Un
groupe peut être un groupe simple contenant de 1 à 24 étudiants, ou un groupe composé
constitué de 2 à n groupes simples. Les groupes simples sont au nombre de 10 et appelés TP
suivi d’une lettre de A à J. Les deux moitiés de la promotion sont appelées M1 et M2. Les
quatre quarts de la promotion sont notés Q1 à Q4. La promotion entière est appelée P.
Une activité pédagogique a une durée fixe de 1h30. Elle peut être du type cours magistral,
cours intégré ou travaux pratiques. Une activité pédagogique est déclinée en une ou plusieurs
séances suivant le nombre de groupes auxquels elle est destinée. Chaque séance a une durée
fixe de 1h30. Elle est associée à un groupe dans une salle et avec un horaire de début.
Cette association est réalisée par le gérant de la scolarité. Ainsi une activité pédagogique
peut être déclinée pendant une séance devant un groupe d’étudiants qui correspond à la
promotion entière. Elle peut aussi donner lieu à 10 séances associées chacune à un groupe
de 24 étudiants.

1.2 Gestion des activités pédagogiques


L’ajout d’une activité pédagogique est réalisée en deux phases. La première phase consiste
à donner un nom et une description à l’activité ainsi qu’à l’associer avec un nombre de
groupes. Cette phase crée l’ensemble des séances. La seconde phase consiste à programmer
les séances, en associant chacune d’elle à un groupe, une salle, une date, et une heure de
début. Certaines séances peuvent être reprogrammées ou annulées pour faire face aux aléas
(enseignant malade, événement impromptu dans la programmation, etc.). Une fois la séance
réalisée, elle est archivée jusqu’à la fin de l’année scolaire. Lorsque toutes les séances sont
réalisées, l’activité pédagogique elle-même est archivée jusqu’à la fin de l’année scolaire.

1.3 Suivi des présences


Les présences sont matérialisées par l’existence d’une relation entre un élève et une séance.
Une élève ne peut être présent qu’une fois dans une séance. Il assiste le plus souvent à la
séance qui correspond à son groupe. Il peut assister à d’autres séances sans que le système
ne refuse de noter sa présence.

2 Partie UML [8 points]


Liste des classes Voici la liste classes et les attributs que nous avons décidé de garder pour
décrire ce système.
— Groupe : classes enfants GroupeDeBase, GroupeCompose, attributs

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 2
CF2 2011–2012

Ajouter un module

Supprimer un module

Modifier un module
Ajouter une activité pédagogique

Modifier une activité pédagogique

Supprimer une activité pédagogique

Programmer une séance

Modifier une séance

GerantScola Noter une présence

Figure 1 – Diagramme de cas d’utilisation

— nomGroupe : String,
— gid : int ;
— Etudiant : attributs
— nom : String,
— prenom : String,
— numEtudiant : String ;
— Module : attributs nomModule : String ;
— ActivitePedagogique : attributs
— numActivite : int,
— nbSeances : int,
— description : String ;
Classes enfants :
— CoursMagistral,
— CoursIntegre,
— TravauxPratiques ;
— Seance : attributs
— Salle : String,
— HeureDebut : Date ;
Les attributs suivants permettent de distinguer les objets d’une même classe :
— numEtudiant : le numéro d’étudiant représente une valeur unique ;
— numActivite : est une numéro de séquence de l’activité dans le module. Ce numéro est
unique pour une activité à l’intérieur d’un module ;
— gid : est un numéro unique qui référence ce groupe. appelée . .

Cas d’utilisation Nous avons retenu pour cette réalisation un seul acteur, qui est le gérant
de la scolarité. Les cas d’utilisation retenus pour cet exercice sont décrits dans la figure 1.

Diagramme de classes Le diagramme de classes que vous devez utiliser pour le reste de ce
sujet se trouve à la figure 2.

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 3
CF2 2011–2012

GestionPresences

*
* 1..24
Module Etudiant
*
1 Groupe
*

présence
0..1
* 1
*
Seance 1
ActivitePedagogique 1

GroupeCompose GroupeDeBase

2..*

CoursMagistral CoursIntégré TravauxPratiques

Figure 2 – Diagramme de classes

Question 1 (4pt) Construire le diagramme de machine à états de la classe ActivitePedago-


gique.
Réponse:

Une ébauche du diagramme de machine à états de la classe ActivitePedagogique


est donnée dans la figure qui suit.

creation Actif

entry / do/programmer()
constructeur() do/donnerCours()
do/annulerCours()

[toutes séances données]

destruction
En Archivage
[fin année scolaire]
entry / detruire()

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 4
CF2 2011–2012

Barème de correction sur 3 points :


Répartition :
1 pas d’erreur de notation UML
1 état actif, et archivage en attente
0.5 tests pour passage archivage
0.5 sortie du réseau possible

Question 2 (5pt) Décrivez en langage naturel le cas d’utilisation : « ajouter le CI appelé


"Maîtriser Eclipse" pour dix groupes au module CSC4002 ».
Les informations passées à ce cas d’utilisation sont : le nom du module (CSC4002), le
résumé de l’activité ("Maîtriser Eclipse") et le nombre de groupes concernés. Ce cas d’uti-
lisation doit créer l’ensemble des séances associées. Ces séances sont créées sans salle, sans
horaire et sans relation avec un groupe.
Ensuite, dessinez le diagramme de communications ou de séquence correspondant à ce
cas d’utilisation.
Réponse:

Pour ajouter l’activité CI au module CSC4002 :

1. on cherche le module CSC4002


2. dans le module on vérifie que l’activité n’est pas déjà associée au module,
3. on crée cette activité et on l’ajoute à la collection,
4. la création de l’activité provoque la création des séances.

:GestionPresence

AjouterCours("CI", "Maitriser Eclipse", "CSC4002", 10)


m = chercherModule("CSC4002")
opt [m!=null]
m:Module

ok=ajouterActivite("CI","Maitriser Eclispe",10))

opt [ok]
ci = create(m,"Maitriser Eclipse" <<New>>
10) ci:CoursIntegre

<<New>> [i=1..10] create(ci)


:Seance

Barème de correction sur 5 points :


Répartition :
1 description logique des étapes,
1 notation UML correcte avec objets

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 5
CF2 2011–2012

1 recherche de l’activité
1 création de l’activité
1 création des séances

3 Partie Java [9 points]


Vos réponses à ces questions doivent être conformes aux diagrammes UML qui vous ont
été fournis ou que vous avez réalisés précédemment. Toutes les réponses doivent être rédigées
dans le langage Java.

Question 3 : (3.5pt) Écrivez les attributs de la classe ActivitePedagogique et proposez un


constructeur pour cette classe.
Réponse:

public class ActivitePedagogique {


private String description;
private Module module;
private int nbSeances;
private boolean enProgrammation;
private boolean enArchivage;
private Vector<Seance> lesSceances;
}
public ActivitePedagogique(Module module, int nbS, String description) {
this.module = module;
nbSeances = nbs;
this.description = description;
lesSeances = new Vector<Seance>();
for(int i = 0; i < nbSeances; i++) {
lesSeances.add(new Seance(this));
}
enProgrammation = true;
enAttente= false;
enArchivage= false;
}

Barème de correction sur 3.5 points :


Répartition :
0.5 attributs correctement traduits
0.5 association pour module et modeleGroupe
0.5 vecteur pour les séances
0.5 constructeur recevant les bons arguments et initialisant l’ensemble des attributs,
0.5 création du vecteur
0.5 création des séances
0.5 ajout de la séance au vecteur.

Question 4 (2pt) Écrivez les constructeurs des classes dérivées de ActivitePedagogique.


Vous devez ici écrire la signature (le prototype) mais aussi le corps (la définition) de chaque
constructeur.
Réponse:

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 6
CF2 2011–2012

public CI(Module module, int nbS, String description) {


super(module, nbS, description) ;
}
public CM(Module module, int nbS, String description) {
super(module, nbS, description) ;
}
public TP(Module module, int nbS, String description) {
super(module, nbS, description) ;
}

Barème de correction sur 2 points :


Répartition :
1 3 constructeurs avec noms des classes
1 utilisation de super

Question 5 (3.5pt) Les attributs de la classe Seance sont les suivants :


private ActivitePedagogique activ;
private Groupe groupe;
private String salle;
private Vector<Etudiant> etudiants;
private Date dateDebut;
private boolean enProgrammation, enAttenteCours, enArchivage;
Écrivez le corps des méthodes suivantes de cette classe :
— public Seance(ActivitePedagogique) qui est le constructeur ;
— public void programmer(Groupe g, Date deb, String s) qui programme une
séance dans une salle avec un groupe ;
— public boolean noterPresence(Etudiant) throws OperationImpossible qui
permet de noter la présence d’un étudiant dans une séance. Cette méthode retourne
true lorsque l’étudiant fait parti du groupe et que sa présence n’a pas déjà été notée.
Elle doit lever l’exception OperationImpossible si la présence est notée plusieurs
fois. Si l’étudiant ne fait pas parti du groupe, sa présence est notée mais la méthode
retourne false.
Vous pouvez considérer que l’exception OperationImpossible existe et qu’elle joue un
rôle équivalent à celui qu’elle a dans l’application Mediatheque que nous avons développée
pendant le module.
La classe Groupe réalise des méthodes semblables à celles des collections sur les objets
de la classe Etudiant qui lui sont associés. Vous pouvez ainsi utiliser la méthode boolean
contains(Object o), que vous connaissez de la classe java.util.Vector, directement sur
les objets de la classe Groupe pour vérifier qu’un étudiant fait partie d’un groupe.
Réponse:

public Seance(ActivitePedagogique act) {


activ = act;
enAttenteCours = false, enArchivage = false, enProgrammation = true;
etudiants = new Vector<Etudiant>();
}
public void programmer(Groupe g, Date deb, String s) {

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 7
CF2 2011–2012

groupe = g;
enAttenteCours = true;
enProgrammation = false;
dateDebut = deb;
salle = s;
}
public boolean noterPresence(Etudiant t) throws OperationImpossible{
if( etudiants.contains(t)) throw new OperationImpossible(t + " est déjà marqué présent " + this;
t.addPresence(this);
etudiants.add(t);
if(groupe.contains(t)) {
return true;

} else {
return false;
}
}

Barème de correction sur 3,5 points :


Répartition :
0.5 : création du vecteur;
0.5 : initialisation des booleens ;
0.5 : test dans le groupe ;
0.5 : throw new
0.5 : test dans le vecteur ;
0.5 : ajout dans le vecteur;
0.5 : retour boolean.

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 8
CF2 2011–2012

Module Etudiant

présence
0..1
* 1 *
Seance
ActivitePedagogique

CoursMagistral CoursIntégré TravauxPratiques

Figure 3 – Partie du diagramme de classes à traduire

4 Partie Correspondance objet-relationnel [3 points]


Question 6 (3pt) Proposer un schéma relationnel par correspondance par applatissement
pour les classes UML du diagramme de classes de la figure 3. Pour chaque relation, vous
définirez les clés des relations, les attributs correspondant aux variables du diagramme de
classes et de la description des classes, éventuellement les attributs permettant d’assurer la
correspondance entre le modèle relationnel et le diagramme de classes et les clés étrangères
lorsqu’il y en a.
Barème de correction sur 3 points :
Répartition :
1 :
1 :
0.5 :
0.5 :

Télécom SudParis — Denis Conan et Christian Bac — 29 Mars 2012 — CSC4002 — CF2 9

Vous aimerez peut-être aussi