Vous êtes sur la page 1sur 8

CF2 2008–2009

Denis Conan et Christian Bac

CSC4002

Télécom SudParis 20 mars 2009


CF2 2008–2009

Corrigé Barème

Groupe des Écoles des Télécommunications


Télécom INT
École d’ingénieurs 2ème année
Contrôle de connaissances : Final
Module CSC4002 : Introduction à la programmation Objet avec UML et
JAVA

Date : 20 mars 2009 Durée : 1H30


Coordonnateurs : Denis Conan et Christian Bac

Notes :
— les seuls documents autorisés sont ceux distribués en cours et ceux mis à disposition sur le site Web ;
— 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 si cela vous semble nécessaire ;
— le sujet correspond à une analyse puis à la programmation des parties analysées. Il ne peut donc pas être
traité dans le désordre.

1 Description du problème
L’objectif du système est d’informatiser le suivi des productions scientifiques d’une institution. Cette
institution organise sa recherche par projets. Le système permet de gérer les projets et leurs productions. Ce
système est piloté par la direction scientifique. Le système doit permettre de créer et de supprimer les types
d’informations sur les projets et les productions.
1.1 Organisation de la recherche
La recherche est organisée en projets qui rassemblent un ensemble d’acteurs. Les projets sont créés et
supprimés par la direction de la recherche.
Chaque projet actif est animé par un responsable de projet, les personnes travaillant dans le projet sont
appelées des membres.
Le responsable du projet est nommé par la direction de la recherche. Un responsable de projet peut
ajouter ou enlever des membres à son projet.
1.2 Description des acteurs
Les acteurs ne sont pas directement gérés par le système mais proviennent d’un annuaire central.
Les informations significatives sur les acteurs sont :
— le nom et le prénom,
— l’adresse email,
— le département d’accueil.
1.3 Description des productions
La productions des acteurs de la recherche sont de trois types :
— contrats,
— publications,
— logiciels.
Les informations associées à un contrat sont la date de début, la date de fin, un montant en kilo euro
pour le fonctionnement et un montant en kilo euro pour l’investissement.
Les informations sur les publications sont le type (article ou rapport), le titre de la publication, la liste des
auteurs, la date de publication, et un champ variable qui peut contenir des lieux ou d’autres informations.
Les informations sur les logiciels publiés sont le nom du logiciel, le descriptif court du logiciel, la liste des
auteurs et l’URI des sources.
Les publications peuvent être ajoutées par les membres d’un projet. Les contrats sont ajoutés directement
par la direction de la recherche. Les logiciels produits ne peuvent être ajoutés que par le responsable du projet.

Télécom SudParis — Denis Conan et Christian Bac — 20 mars 2009 — CSC4002 2


CF2 2008–2009

1.4 Suivi des productions


Les productions sont controlées par la direction de la recherche. Pour être valides, elles doivent être
certifiée par un membre de la direction.
Les productions du type contrat de recherche sont archivées lorsque leur date de fin est dépassée.
La direction de la recherche désire établir un tableau de bord avec les indicatifs suivants :
— nombre de publications par année ;
— volant annuel des contrats ;
— nombre de logiciels produits dans l’année.
Ces indicateurs sont à fournir globalement pour tous les projets et par projet.
2 Partie UML [12 points]
Question 1 : 2pt Après avoir réalisé une analyse du texte au brouillon, ce qui vous a permis de trouver
les noms (substantifs) et les verbes correspondant à ce problème, choisir les classes qui vous semblent devoir
faire partie de la modélisation de ce problème. Décrire textuellement ces classes et les attributs associés à
chaque classe (donner le nom des classes, le nom de leurs attributs et des explications textuelles uniquement
quand cela vous semble nécessaire).
Une première analyse de ce problème a permis d’obtenir les résultats et schémas suivants :
— Direction Scientifique
— Projet
— nom
— Acteur
— nom
— prénom
— département
— dateDébut
— Production
— Contrat (classe dérivée Production)
— dateDébut
— dateFin
— budgetFonctionnement
— budgetInvestissement
— Publication (classe dérivée Production)
— type (rapport,article)
— titre,
— listeAuteurs
— date
— champVariable
— Logiciel (classe dérivée Production)
— nom
— listeAuteurs
— description
— URISources
Barème de correction sur 2 points :
Répartition :
0,5 classe production
0,5 classe projet
0,5 classe acteur
0,5 attributs des classes et sous classes productions

Question 2 : 3pt Décrire les acteurs et les opérations significatives du système par un diagramme de cas
d’utilisation.
La figure suivante présente les acteurs et les cas d’utilisation du système.
Barème de correction sur 3 points :
Répartition :

Télécom SudParis — Denis Conan et Christian Bac — 20 mars 2009 — CSC4002 3


CF2 2008–2009

créer Projet

nommer le responsable

arreter projet
ajouter contrat
directionScientifique valider une production

etablir un tableau de bord

ajouter acteur dans projet

supprimer acteur projet

Responsable Projet ajouter logiciel

ajouter publication

Membre Projet

Figure 1 – Diagramme de cas d’utilisation

0,5 respect de la notation UML (système, bonhomme, trait, phrase


verbale, cadre ovale autour des cas d’utilisation)
0,5 trois acteurs
0,5 généralisation/spécialisation entre les acteurs
0,5 cas d’utilisation aux bons acteurs
max 1 : - 0,5 ce qu’il faut pour ajouter/supprimer une projet
- 0,5 ce qu’il faut pour ajouter/retirer un utilisateur à un projet
- 0,5 ce qu’il faut pour ajouter les productions

Question 3 : 3pt Construire un diagramme de classes qui représente le système. Dans ce diagramme,
prenez soin de préciser les noms des associations, les multiplicités et les sens de navigation des associations
lorsque nécessaire. Une ébauche de diagramme de classes est donnée figure 2.
DirectionScientifique

valide

* aPourResponsable * *
Projet réalise * Production
Acteur
* aPourMembre
* aPourAuteur
* *
Article Contrat

* Logiciel
aPourAuteur

Figure 2 – Diagramme de classes

Barème de correction sur 3 points :


Répartition :
0,5 pas d’erreur de notation UML
(classe, nom association, généralisation/spécialisation, agrégation, etc.)
0,5 multiplicités sont correctes
0,5 composition faible entre production et projet
0,5 héritage entre production et contrat, publication et Logiciel
0,5 composition faible entre système et utilisateurs
0,5 relations entre sous classes de production et acteurs

Question 4 : 2pt Construire les diagrammes de transition d’état des classes publication et contrat. Dia-
gramme de Transitions d’états des classes Contrat et Publication.
Les diagrammes de transition d’états des classes Contrat et Publication sont donnés figure 3
Barème de correction sur 2 points :

Télécom SudParis — Denis Conan et Christian Bac — 20 mars 2009 — CSC4002 4


CF2 2008–2009

creation creation proposé DS


Encours


entry / pret

cis
entry / constructeur() do / modifier()

io
pret do / realiser()

n
da /a

DS
constructeur()

te rc

[d
de hiv

éc
fin er(

isi
on
dé )

=v
pa

ali
ss


e

]
décision DS [décision=refusé]
valide
Archivé
destruction
destruction
/invalider()
entry / detruire() /purger() entry / detruire()

Figure 3 – Diagramme de transition d’états des classes Contrat et Publications

Répartition :
0,5 pas d’erreur de notation UML
0,5 état non validé et validé pour publication
0,5 état en cours et archivé pour contrat
0,5 événement et action distingués

Question 5 : 2pt Décrivez en langage naturel le cas d’utilisation « calculer la liste des publications d’un
projet ». Puis donnez le diagramme de séquence ou le diagramme de collaboration correspondant. Pour
calculer la liste des publications d’un projet, on doit tout d’abord trouver le projet à partir de son nom ;
puis demander au projet de nous retourner cette liste de publications. Une alternative, consiste à demander
au projet la liste des productions puis de trier parmi ces productions, en ne gardant que celles qui sont des
publications.
Le diagramme de séquence de la méthode ListePublications de la classe DirectionScientifique est donnée
figure 4.

:DirectionScientifique p:Projet

ListePublications(nomProjet)
p = chercherProjet(nomProjet)

l = listePublications()

Figure 4 – Diagramme de séquences de la méthode ListePublications de la classe DirectionScientifique

Barème de correction sur 2 points :


Répartition :
0,5 description logique des étapes, recherche du projet et interrogation
0,5 notation UML correcte avec objets
0,5 recherche du projet dans la liste des projets
0,5 appel de la méthode sur le projet

3 Partie JAVA [5 points]


Vos reponse à ces questions doivent être conformes aux diagrammes UML que vous avez fournis précé-
demment.
Toutes les réponses doivent être rédigées dans le langage Java.

Télécom SudParis — Denis Conan et Christian Bac — 20 mars 2009 — CSC4002 5


CF2 2008–2009

Question 6 : 2pt Écrire les attributs de la classe Projet.


Réponse:

public class Project {


private String nom;
private Acteur responsable;
private Vector<Acteur> membres;
private Vector<Production> productions;
}

Barème de correction sur 2 points :


Répartition :
0.5 private
0.5 attributs correctement traduits
0.5 vecteurs pour membres et productions
0.5 association pour responsable

Question 7 : 3pt Traduisez en java, les méthodes de la classe Projet que vous avez utilisées dans la
question 5. Vous devez ici écrire l’interface mais aussi le contenu de chaque méthode.
Réponse:

public Vector<Publication> listePublications() {


Vector<Publication> pubVec = new Vector<Publication>();
Enumeration<Production>eProd = productions.Elements();
while(eProd.hasMoreElement(){
Production p = eProd.nextElement();
if(p instanceOf Publication) {
pubVec.add((Publication) p);
}
}
return pubVec;
}

Barème de correction sur 3 points :


Répartition :
0.5 retour vecteur
0.5 creation du vecteur vide
0.5 parcours du vecteur de production
0.5 test instanceof
0.5 ajout au vecteur
0.5 cast explicite sur Publication

4 Partie Tests et bases de données [3 points]


Question 8 (1pt) Écrivez un test unitaire de la classe projet qui permette de vérifier que l’ajout d’une
production se passe correctement.
Le test unitaire consiste à ajouter une production et à vérifier que le nombre de productions a augmenté
de un. Ce test se réalise sur un projet fictif que nous avons appelé TestProject.
Réponse:

import org.junit.After;

Télécom SudParis — Denis Conan et Christian Bac — 20 mars 2009 — CSC4002 6


CF2 2008–2009

import org.junit.Before;
import org.junit.Test;

public class TestAjoutProductionJunit {


Project project;
@Before
public void setUp() throws Exception {
project = new project("TestProject");
}
@After
public void tearDown() throws Exception {
project=null;
}
@Test
final public void testInsert() {
long countbefore = project.get_prod_count();
ListeActeur = new Vector<Acteur>();
ListeActeur.add(project.get_responsable());
Publication = new Publication("rapport", "Titre", ListeActeur,Date.today(),"Publication de test");
long countafter = project.get_prod_count();
Assert.assertEquals(countbefore+1,countafter);
}
}

Barème de correction sur 1 points :


Répartition :
0.5 : setup, teardown et asserEquals
0.5 : logique bonne code correct

Question 9 (2pt) Écrivez le constructeur de la classe projet qui reçoit un identifiant de projet et initialise
l’objet construit à partir des champs contenus dans la base de données qui correspondent à ce numéro de
projet.
Réponse:

Il est pour cela nécessaire de décider quels sont les champs


représentant un projet. Ces champs sont les attributs du projet,
c’est à dire son nom. Il est certainement nécessaire d’avoir un
mécanisme reliant les acteurs à un projet, qui n’est pas forcément
dans la table projet.

public Project(String name) throws SQLException {


String sql = "select * from projectTable where name = ’" + name +"’";
ResultSet rset = stmt.executeQuery(queryString);
rset.next();
projectId = rset.getLong(1);
this.name = rset.getString(2);
}

Barème de correction sur 2 points :


Répartition :
.5 : description rapide de la table
.5 : code globalement correct
.5 : utilisation correcte sql avec stmt

Télécom SudParis — Denis Conan et Christian Bac — 20 mars 2009 — CSC4002 7


CF2 2008–2009

.5 : exception OK

Télécom SudParis — Denis Conan et Christian Bac — 20 mars 2009 — CSC4002 8

Vous aimerez peut-être aussi