Corrigé Barème Contrôle de connaissances 2013/2014 des étudiants de 2 è année (EI2) CSC4002 : Contrôle Final Session 2



Documents pareils
TD/TP PAC - Programmation n 3

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmer en JAVA. par Tama

Environnements de développement (intégrés)

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP1 : Initiation à Java et Eclipse

Corrigé des exercices sur les références

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Programmation en Java IUT GEII (MC-II1) 1

TD/TP PAC - Programmation n 3

Programmation Objet Java Correction

Tp 1 correction. Structures de données (IF2)

Projet de programmation (IK3) : TP n 1 Correction

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Introduction au langage de programmation Java

Programmation par les Objets en Java

as Architecture des Systèmes d Information

Remote Method Invocation (RMI)

Chapitre VI- La validation de la composition.

UML et les Bases de Données

TP1. Outils Java Eléments de correction

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Auto-évaluation Programmation en Java

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Package Java.util Classe générique

Développement Logiciel

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Cours 1: Java et les objets

TD3: tableaux avancées, première classe et chaînes

Un ordonnanceur stupide

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

OpenPaaS Le réseau social d'entreprise

4. Groupement d objets

Sommaire. G. Pujolle, F. Ravat, C. Soulé-Dupuy, G. Zurfluh

OCL - Object Constraint Language

GOL502 Industries de services

Héritage presque multiple en Java (1/2)

Généralités sur le Langage Java et éléments syntaxiques.

Alfstore workflow framework Spécification technique

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Diagramme de classes

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Java Licence professionnelle CISII,

Langage Java. Classe de première SI

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Chapitre 10. Les interfaces Comparable et Comparator 1

Une introduction à Java

Application web de gestion de comptes en banques

Université de Bangui. Modélisons en UML

UML. Diagrammes de classes (suite) Delphine Longuet.

Java c est quoi? Java pourquoi?

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Traduction des Langages : Le Compilateur Micro Java

Introduction au langage C

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Utiliser Java sans BlueJ

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Java Licence Professionnelle CISII,

Définition des Webservices Ordre de paiement par . Version 1.0

Programmation avec des objets : Cours 7. Menu du jour

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Chapitre 2. Classes et objets

TP, première séquence d exercices.

Ingénierie des Modèles. Méta-modélisation

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Objets et Programmation. origine des langages orientés-objet

Applet pour visualiser les variables «automate» notifiées

Programmation par composants (1/3) Programmation par composants (2/3)

RMI le langage Java XII-1 JMF

Algorithmique et Programmation, IMA

Plateforme PAYZEN. Définition de Web-services

Initiation à JAVA et à la programmation objet.

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Design patterns. Design patterns - définition. Design patterns - avantages

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Une introduction à la technologie EJB (2/3)

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Utilisation d objets : String et ArrayList

Structurer ses données : les tableaux. Introduction à la programmation

Architecture Orientée Service, JSON et API REST

ACTIVITÉ DE PROGRAMMATION

UML : DIAGRAMME D ETATS

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Synchro et Threads Java TM

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Plan du cours. Historique du langage Nouveautés de Java 7

Transcription:

Corrigé Barème Contrôle de connaissances 2013/2014 des étudiants de 2 è année (EI2) CSC4002 : Contrôle Final Session 2 Date : 27 Mars 2014 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.

1 EuroCompta L objectif du système est de modéliser le fonctionnement d un groupe de cabinets de comptabilité d entreprises. 1.1 Description du système Le système permet de gérer des cabinets de comptabilité avec leurs employés et leurs entreprises clientes. Chaque cabinet est associé à un ensemble d entreprises. Les employés des cabinets réalisent diverses tâches. Le système que nous modélisons et concevons sert à prospecter des entreprises pour être de futures clientes et à établir les bilans comptables des entreprises clientes. Un cabinet est composé d un expert comptable qui est responsable du cabinet. L expert comptable est le seul habilité à certifier un bilan. Il peut recruter ses collaborateurs. Le nombre de collaborateurs détermine la taille du cabinet. Parmi les collaborateurs d un cabinet, nous distinguons les comptables qui sont habilités à réaliser les bilans et les secrétaires commerciaux qui prennent en charge la relation client, y compris le démarchage que nous appelons dans la suite «prospect» (pour prospection des clients). Un comptable est en charge d au plus vingt entreprises et un commercial peut gérer un portefeuille de quarante entreprises et vingt prospects (dossiers d entreprises en cours de démarchage). 1.2 Gestion des prospects et des bilans Un secrétaire commercial gère son parc de prospects et de clients. Il propose des contrats pour l établissement des bilans mais aussi pour le suivi de la comptabilité par la réalisation du journal comptable de l entreprise. Les contrats dépendent de la taille de l entreprise, et plus précisément du nombre d écritures qu elle réalise chaque année. Une écriture correspond à une ligne dans le journal comptable de l entreprise. Une entreprise peut choisir la périodicité de son bilan qui peut être annuelle, semestrielle (tous les 6 mois) ou trimestrielle (tous les 3 mois). Pour les bilans annuels, une date de clôture est spécifiée ; le plus souvent, c est le 31 décembre de l année en cours. Seul le bilan annuel doit être certifié pour être présenté à l administration fiscale. Les autres bilans sont établis le même jour du mois, le plus souvent le 10. Lorsqu un nouveau contrat est établi, il est à l état de projet. Pour qu il passe à l état de proposition il est nécessaire de connaître le nombre d écritures comptables annuelles et la périodicité du bilan. Chaque proposition est ensuite négociée avec l entreprise et son montant est fixé avant que le contrat ne passe dans l état accepté. Les bilans peuvent être dans l état en cours, achevé, vérifié et certifié. Les bilans sont gardés pendant cinq ans avant d être archivés. 2 Partie UML [10 points] Liste des classes Voici la liste des classes et des attributs que nous décidons de garder pour décrire ce système : EuroComptable : nomgroupe :String datecréation : Date Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 2

Cabinet : dateouverture : Date adresse : Adresse numcabinet : String Collaborateur : nom : String, prénom : String clefemployé : String Classes enfants : Commercial Comptable Classe enfant : Expert Entreprise nom : String, adresse : Adresse numentreprise : String Contrat numcontrat : String ; datedébut : Date daterenouvellement : Date clôtureannuelle : Date périodicité : String jourdumoisbilan : int montantcontrat : float Journal Bilan Les attributs suivants permettent de distinguer les objets d une même classe : numcabinet : est un numéro unique qui identifie un cabinet. Ce numéro unique est attribué par la méthode String getnewnumcabinet() de la classe EuroComptable ; clefemploye : la clef d employé représente une valeur unique. Cette clef est attribuée par la méthode String getnewclefemploye() de la classe Cabinet ; numentreprise : est un numéro unique qui identifie une entreprise dans un cabinet. Ce numéro unique est attribué par la méthode String getnewnumentreprise() de la classe Cabinet ; numcontrat : est un numéro unique qui identifie un contrat dans une agence. Ce numéro unique est attribué par la méthode String getnewnumcontrat() de la classe Cabinet. Cas d utilisation Nous avons retenu pour cette réalisation trois acteurs : commercial, comptable et expert comptable. Tous les cas d utilisation ne sont pas décrits. Les cas d utilisation pertinents pour cet examen sont décrits dans la figure 1. Diagramme de classes Question 1 (5pt) système. Réalisez un diagramme de classes correspondant à cette description du Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 3

Ajouter un prospect Proposer un contrat Mettre a jour un contrat Commercial Relancer un prospect Verifier un journal Etablir un bilan Comptable Valider un contrat Embaucher un employe Licensier un employe Expert Certifier un bilan Figure 1 Diagramme de cas d utilisation EuroCompta Cabinet directeur Expert personnel maintient Comptable Collaborateur client Entreprise contracte Commercial Bilan Journal 1..4 associe 0..1 associe Contrat 0..40 gerer 0..20 demarcher 0..20 etablir bilan certifier bilan Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 4

Barème de correction sur 5 points : 1 notation UML correcte 0,5 héritage collaborateur, comptable, expert 0,5 association comptable contrat 0,5 association commercial contrat 0,5 cardinalités 40 et 20 0,5 compositions à partir de cabinet 0,5 association contrat bilan avec cardinalité 1..4 0,5 nommage des associations 0,5 association contrat journal avec cardinalité 0..1 Question 2 (5pt) Construire le diagramme de machine à états de la classe Contrat. Une ébauche du diagramme de machine à états de la classe Contrat est donnée dans la figure qui suit. Creation Demarchage demande chiffrage Negociation entry: / constructeur() do:/demarcher() contrat non accepte do:/proposerchiffrage() [relances infructueuse]/abandonner() contrat signe renegociation: EnCours do: fairebilan() [date > date fin] echec renegociation Destruction entry: / detruire() Barème de correction sur 5 points : 1 pas d erreur de notation UML 1 3 états 1 événements entre négociation et en cours 1 lien direct avec destruction Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 5

1 retour entre encours et negociation 3 Partie Java [10 points] Vos réponses à ces questions doivent être conformes aux diagrammes UML que vous avez réalisés précédemment. Toutes les réponses doivent être rédigées dans le langage Java. L ensemble des fichiers de cette réalisation sont dans le paquetage appelé cabinetcomptable. Les collections doivent être réalisées en utilisant la classe java.util.vector et l interface java.util.list. Question 3 : (3pt) Écrivez une ébauche de la classe Commercial contenant les attributs de cette classe et un constructeur pour cette classe ayant le prototype suivant : public Commercial(String nom, String prenom, Cabinet cabinet). package cabinetcomptable; import java.util.vector; import java.util.list public class Commercial extends Collaborateur { private static final int maxcontrats = 40; private static final int maxprospects = 20; private List<Contrat> contrats; private List<Contrat> prospects; public Commercial(String nom, String prenom, Cabinet cabinet) { super(nom, prenom, cabinet); contrat = new Vector<Contrat>(); prospects = new Vector<Contrat>(); Barème de correction sur 3 points : 0.5 package 0.5 import correct 0.5 extends correct 0.5 attributs liste 0.5 utilisation du super constructeur 0.5 initialisation des vecteurs Question 4 (3pt) Écrivez une ébauche de la classe Contrat contenant les attributs de cette classe et un constructeur pour cette classe. package cabinetcomptable; public class Contrat { private String numcontrat; private Date datedebut, daterenouvellement; private Date clotureannuelle ; Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 6

private String periodicite ; private int jourdumoisbilan ; private float montancontrat ; private int nbbilans ; private Entreprise entreprise; private Commercial responsable ; private Comptable comptable ; private Cabinet cabinet; private Expert expert; private boolean endemarchage, ennegociation, encours, enarchive; private List<Bilan> bilans; private Journal journal; public Contrat(Entreprise e, Commercial co, Cabinet ca){ cabinet = ca; numcontrat = cabinet.getnewnumcontrat(); entreprise = e; responsable = co; endemarchage = true; bilans = new Vector<Bilan>(); Barème de correction sur 3 points : 0.5 report attributs du texte ok 0.5 attributs en provenance du diagramme de classes 0.5 attributs du dme 0.5 utilisation de getnewnumcontrat 0.5 initialisation de l état dme 0.5 initialisation bilans Question 5 (2pt) Proposez deux méthodes permettant à un commercial de réaliser son bilan annuel par le calcul du nombre de contrats en cours dans son portefeuille et du montant de ses contrats. Pour cela, écrivez le corps des méthodes de la classe Commercial ayant les protoypes suivants : public int nbencours() public float valeurencours() Vous pouvez considérer que la classe Contrat dispose de méthodes de type getter pour les valeurs des attributs dont vous avez besoin. public int nbencours() { return contrats.size(); public float valeurencours() { float valeur = 0; for(contrat c : contrats) { if(c.isencours()){ valeur += c.getmontant(); return valeur; Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 7

Barème de correction sur 2 points : 0.5 utilisation de size 0.5 parcours correct du vecteur 0.5 test et addition 0.5 retours de valeurs corrects Question 6 (2pt) Le méthode qui permet d ajouter un contrat au sein de la classe Cabinet possède le prototype suivant : Contrat ajoutercontrat(entreprise e, Commercial c) throws IllegalArgumentException. Cette méthode lève cette exception dans trois cas : l entreprise est une référence nulle ou n est pas présente dans la collection gérée par le cabinet ; le commercial est une référence nulle ou n est pas présent dans la collection gérée par le cabinet ; il existe déjà un contrat pour cette entreprise. Nous vous fournissons le jeu de tests suivant et vous demandons de le compléter pour que tous les cas soient couverts. package testeurocompta; import cabinetcomptable.; import org.junit.; public class testajoutercontrat(){ EuroComptable facade; Cabinet c1; Entreprise e1; Commercial a1; Contrat p; @Before public void setup() throws Exception { facade = new EuroComptable("eurocompta"); c1 = new Cabinet("22 Boulevard Caumartin, Paris 8"); facade.ajoutercabinet(c1); e1 = c1.addentreprise("peugeot paris 8", "32 Boulevard Champs Elysees, Paris 8"); a1 = c1.addcommercial("guerin", "Sandra"); a1.ajouter(e1); @Test public void ajoutercontratok() { Contrat co = c1.ajoutercontrat(e1, a1) @After public void teardown() throws Exception { e1 = null; c1 = null; a1 = null; facade = null; package testeurocompta; Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 8

import eurocompta.; import org.junit.; public class testajoutercontrat(){ EuroComptable facade; Cabinet c1; Entreprise e1; Commercial a1; Contrat p; @Before public void setup() throws Exception { facade = new EuroComptable("eurocompta"); c1 = new Cabinet("22 Boulevard Caumartin, Paris 8"); facade.ajoutercabinet(c1); e1 = c1.addentreprise("peugeot paris 8", "32 Boulevard Champs Elysees, Paris 8"); a1 = c1.addcommercial("guerin", "Sandra"); a1.ajouter(e1); @Test(expected=IllegalArgumentException.class) public void ajoutercontratentreprisenulle() throws Exception { Contrat co = c1.ajoutercontrat(null, a1) Assert.fail(); @Test(expected=IllegalArgumentException.class) public void ajoutercontratentrepriseinexistante() throws Exception { Entreprise e2 = new Entreprise(c1, "peugeot paris 8", "32 Boulevard Champs Elysees, Paris 8"); Contrat co = c1.ajoutercontrat(e2, a1) Assert.fail(); @Test(expected=IllegalArgumentException.class) public void ajoutercontratcommercialnull() throws Exception { Contrat co = ajoutercontrat(e1, null) Assert.fail(); @Test(expected=IllegalArgumentException.class) public void ajoutercontratcommercialinexistant() throws Exception { Commercial a2 = new Commercial("Guerin", "Sandra", c1); Contrat co = c1.ajoutercontrat(e1, a2) Assert.fail(); @Test public void ajoutercontratcommercialok() throws Exception { Contrat co = c1.ajoutercontrat(e1, a1) @After public void teardown() throws Exception { e1 = null; c1 = null; a1 = null; facade = null; Barème de correction sur 2 points : 0.5 par test 0.5 si Assert.fail 0.5 si throws et test expected= Télécom SudParis Denis Conan et Christian Bac 27 Mars 2014 CSC4002 CF2 9