CONCOURS DE L'AGREGATION INTERNE «ECONOMIE ET GESTION» SESSION 2002 EPREUVE PORTANT SUR LES TECHNIQUES DE GESTION ET COMPORTANT DES ASPECTS PEDAGOGIQUES DOMAINE : économie et gestion informatique Durée de préparation : 4 heures Vous disposez d'une durée maximale de 30 minutes pour présenter oralement la solution de l'étude qui vous est proposée. Au cours de l'entretien qui suivra, outre les précisions qui peuvent être demandées sur votre exposé, vous seront posées des questions d'ordre pédagogique en liaison avec le thème étudié. AVERTISSEMENT Si le texte du sujet, de ses questions ou de ses annexes, vous conduit à formuler une ou plusieurs hypothèses, il vous est demandé de la (ou les) mentionner explicitement lors de votre exposé.
Dans une entreprise importante, la direction financière effectue un certain nombre de placements en valeurs mobilières de placement ; ces valeurs sont pour l instant des actions et obligations cotées sur le marché financier. Le choix de la constitution du portefeuille est réévalué tous les trois mois en général mais des achats ou ventes ponctuelles peuvent intervenir a n importe quel moment. Le service financier utilise un logiciel spécifique développé sur tableur. Suite au départ du collaborateur qui a développé le logiciel et aux problèmes inextricables de reprise de ce logiciel ( peu de documentation, code spaghetti, modifications acrobatiques, beaucoup trop de saisie a effectuer), le directeur financier, adepte des nouveautés et bien au courant des tendances informatiques est attiré par des développements utilisant une démarche objet et des langages objets type VB.net ou JAVA ou C++. Les objectifs essentiels pour le directeur financier, outre les fonctionnalités demandées sont : Une maintenabilité améliorée La possibilité d étendre l application (en particulier vers de nouveaux types de valeur ) L utilisation de composant existant.. En outre, il a été décidé de prendre une base de données relationnelle pour stocker les données, certainement SQL Server car ce logiciel existe déjà dans l entreprise. Des éléments ont déjà été conçu par un consultant extérieur dont certains travaux sont indiqués ultérieurement. Celui-ci a surtout créé le package de classe Valorisation qui permet de connaître la valeur d un titre a une date donnée. Ce package est maintenant fiable. Vous êtes chargé de concevoir une application prototype avec les éléments existant, en prenant en compte l évolution suivante, l achat ou la vente d options sur actions pour gérer la volatilité des cours. QUESTIONS : 1) A partir du schéma actuel construisez la structure de la base de données qui permettra de stocker les données sur le portefeuille et l historique des opérations. 2) Avec la base construite précédemment, implémentez sous forme d algorithme la méthode getvaleuractuelle() et la méthode de classe getvaleurduportefeuille(), (ou quel algorithme pour calculer la valeur actuelle d un titre en portefeuille et la valeur actuelle du portefeuille). Vous indiquerez les possibles modifications a faire sur la conception ou l implémentation présentée pour rendre la solution plus opérationnelle, plus souple, plus robuste. 3) Indiquez la structure de la base de données pour prendre en compte les options sur actions et le suivi de scénarios ainsi que les modification à l architecture de l application pour tenir compte du composant optionvaleur(nouvelles classes ou ajouts de fonctions/méthodes, etc). 4) Développez le principe d un algorithme permettant de donner la valeur acquise d un capital placé à intérêt simple, dont l intérêt est variable par période : par exemple sur 30 jours le taux annuel est de 5,50% puis ensuite sur 60 jours de 6% enfin sur 30 jours de 6,30% ( on supposera l année de 365 jours) et d indiquer le taux effectif du placement sur la totalité de la période par exemple ici sur les 120 jours. Remarque : Le directeur informatique a un lourd passé (d échec ou de solution miraculeuse catastrophique) avec l informatique et sait qu il est difficile de construire une solution robuste aussi il demande une argumentation claire sur les choix faits et reste tout à fait ouvert aux critiques bien fondées sur l ébauche de solution présentée et aux propositions de solutions pertinentes. Bref une solution non objet pertinente est possible.
Schéma actuel de l application ( vue partielle) valorisation ValeurEnPortefeuille ValeurHelper gettype -codesicovam +getvaleuractuelle() +getvaleurduportefeuille () 0..1 0..1 Action +getvaleuractuelle() Obligation +getvaleuractuelle() Une valeur en portefeuille avec un ensemble d opération d achat ou de vente 1..n Operation -dateopération -quantité -montanttotal -frais +getdateoperation() +getquantite() +getmontanttotal() +getfrais() Achat -nomordonnateur Vente
Schéma actuel de l application En raison du manque de temps et de la difficulté à le rendre robuste, seul le package Valorisation a été développé, testé et fiabilisé. Le reste de l application et en particulier les classes ValeurEnPortefeuille et Opérations sont plutôt une ébauche de solution. Classe ValeurEnPortefeuille{ variable d objet privée entier codeinterne privée chaine de caractère : codageexterne // par exemple le code Sicovam pour les actions obligations privée Action action // null si ce n est pas cela privée Obligation : obligation privée nombreopération ; privée tableau de Operation :taboperation //null si ce n est pas cela // tableau d objets Operation qu on suppose constitué a la création de //l objet ValeurEnPortefeuille // on peut très bien utiliser des Collection tel que des Vecteur ou ArrayListetc méthode de classe //donne la valeur du portefeuille de l entreprise en prenant la valeur Actuelle de chacun des titres par le // nombre de titres en portefeuille publique statique getvalorisationportefeuille() : decimal // donne la valeur du portefeuille de l entreprise en prenant la valeur Actuelle de chacun des titres par //le nombre de titre en portefeuille publique statique getvaleurenportefeuille() :decimal //donne la valeur totale actuelle du titre en portefeuille= quantité en portefeuille* valeur actuelle publique getvaleuractuelle() :decimal. classe abstraite Operation{ variable d objet privée chaîne de caractère dateoperation privée entier quantité privée decimal montanttotal privée decimal frais publique getdateoperation() : chaine de caractère publique getquantite() : entier publique getmontanttotal() : decimal publique getfrais() : decimal. classe Achat hérite Operation{ variable d objet // correspond à celui qui a donné l ordre d achat car cela peut être un des dirigeants privée chaîne de caractère NomOrdonnateur //indique les raisons de l achat en particulier si ce n est pas la direction financière privée chaîne de caractères : commentaire publique constructeur Achat(chaine de caractère date,entier quantite, decimal montanttotal,decimal frais, chaine de caractère nomordonnateur) publique getnomordonateur() :chaîne de caractère publique getcommentaire() :chaîne de caractère classe Vente hérite Operation{ publique constructeur Vente(chaine de caractère date,entier quantite, decimal montanttotal, decimal frais)
le package ou module Valorisation Les classes Action, Obligation ont été développées par un Consultant extérieur et encapsulent un service de valorisation des titres (ces classes se chargent du service d accès à des bases de données sur les titres du marché) grâce aux méthodes ou fonctions getvaleuractuelle().la classe ValeurHelper permet d avoir des renseignements divers sur les valeurs Remarques : -le service financier dispose des codes source écrits par le consultant et des outils pour compiler, tester, exécuter les programmes. -le package fourni est entièrement implémenté et est considéré comme fiable. classe Action { méthode de classe //permet la création d un objet Action si le code Sicovam est reconnu sinon déclenche une exception publique statique createaction(chaine de caractère codesicovam) : Action throws CodeInconnuException // donne la dernière valeur connue de la valeur publique getvaleuractuelle() :decimal // il existe d autres méthodes spécifiques aux actions.. classe Obligation{ méthode de classe //permet la création d un objet Obligation si le code Sicovam est reconnu sinon déclenche une exception publique statique createobligation(chaine de caractère codesicovam):obligation throws CodeInconnuException // donne la dernière valeur connue de la valeur publique getvaleuractuelle() :decimal // il existe d autres méthodes spécifiques aux obligations. classe ValeurHelper{ variable de classe publique statique entier INCONNU=0 ; publique statique entier ACTION=1 ; publique statique entier OBLIGATION=2 ; méthode de classe //donne pour le code indiqué le type de la valeur sinon déclenche une erreur si la valeur est inconnue publique statique gettype(chaine de caractère codesicovam):entier throws CodeInconnuException remarque sur les Exception : toutes les exceptions sont des sous-classes de la classe Exception et possèdent une méthode getmessageerreur() qui donne une chaîne de caractère avec la raison de l erreur.
Options On veut pouvoir intégrer les options sur actions achetées ou vendues. Vous disposez de documents expliquant les options sur actions. Les options ne sont achetées que si le titre existe déjà dans le portefeuille Il peut être envisagé d acheter des composants logiciels auprès de sociétés spécialisées pour avoir la valeuractuelle() d une option en particulier le composant suivant : Remarque : on ne dispose que du composant binaire (pas des sources) Classe OptionValeur{ méthode de classes publique statique getinstanceoptionvaleur(chaine caractère codeoption,chaine caractère dateecheance,decimal prixexercice) : OptionValeur méthode objet // donne la valeur actuelle d une option sur un titre publique valorisationactuelle() :decimal Scénarios Les opérations d achats et ventes sur le portefeuille ont lieu en général tous les 3 mois et on fait différentes hypothèses appelés scénarios avant d en choisir un réellement. On souhaite pouvoir faire et conserver des scénarios pour permettre d évaluer différentes politiques. Plus précisément, lors d achats (voire de ventes) on peut avoir plusieurs scénarios Exemple : Scénario 1 du 1 mars 2002 Achat de 1000 michelins Achats de 1000 peugeots Contrats pour options de vente sur 1000 michelins Scénario 2 du 1 mars 2002 Achats de 1000 canal+ Etc. Scénario 1 du 1 juin 2002 Achats de 2000 vivendi Etc.. Scénario 2 du 1 juin 2002 Vente de 100 michelins On souhaite voir l impact des différents scénarios sur l évaluation de la valeur du portefeuille. C est à dire en décembre 2002 la valeur du portefeuille si le scénario 1 du 1 mars 2002 et le scénario 2 du 1 juin 2002 avait été exécutés. Donc il est nécessaire de conserver ces informations.
Annexe 1