Objectifs ========= Le but de ce projet et la réalisation d'un système d'information pour une université comme Bordeaux 1. Un tel système contient un grand nombre de module pour gérer tout ce qui concerne les locaux, le personnel, les étudiants, etc. De plus, un tel système doit être extensible pour que de nouvelles fonctionnalités puissent être rajoutées au fur et à mesur que les besoins des utilisateurs évoluent. La tradition dans la création d'un système d'information veux qu'une base de données relationnelle soit employée. Le système utilise les tables d'une telle base pour stocker toutes les informations nécessaire pour le bon fonctionnement du système. Ces information prennent souvent la forme de texte, mais peuvent également être sous forme de donnée binaires comme des images. Par contre, étant donnée la nature des systèmes d'exploitation d'aujourd'hui, il est impossible de stocker des pointeurs, à savoir des références à d'autres objets du système, autre que sous la forme d'indexes que le programmeur doit alors créer lui-même. Ce système utilise une conception totalement différente. Il suppose qu'il tourne par desssus d'un système d'exploitation permettant la "persistence universelle". Cela implique que l'existence d'un disque est entièrement cachée du programmeur. Ce dernier programme comme si les objects créés en mémoire centrale reste disponible même après un arrêt ou un plantage du système. C'est le système d'exploitation qui s'occupe de créer cette illusion en utilisant des technique de prises d'instantanées (checkpointing). Le résultat est que le programmeur peut se concernter sur son problème, plutôt que de penser à la conversion de ses objets entre une représentation en mémoire vive et une représentation sur disque sous la forme de suite d'octets et au transfert de ses objets entre mémoire principale et mémoire secondaire. De plus, l'utilisation de pointeurs (références) encourage le partage d'objets et économise ainsi de la place. C'est la mémoire virtuelle qui s'occupe du transfert des objets, mais la sémantique employée est celle de la mémoire principale. On peut se poser la question de la place occupé par les données et le code d'un tel système, et se demander si la mémoire principale n'est pas beacoup trop petite pour tenir tous ces objets, avec comme résultat un taux de défaut de pages déraisonnable et donc une dégradation de la performance. En fait, c'est exactement le contraire. En générale, l'ensemble des informations d'une organisation de la taille d'une université tienne très bien dans la mémoire centrale d'un ordinateur personnel actuel, et la talle d'une mémoire typique d'un tel ordinateur grandi plus vite que les données d'une organisation de ce type. Un autre aspect de ce système qui est très différent d'un système habituel est qu'aucune information ne sera effacée. Chaque modification d'un créneau (champ) sera accompagné de la création d'un enregistrement permettant de connaître la modification effectuée et de la défaire si nécessaire. Par conséquent, il sera toujours possible de répondre à une requête quelconque, même sans que cela soit prévu a priori par la conception du système. La seule responsabilité du programmeur (et ce n'est pas différent d'un système traditionnel) est de signaler qu'un paquet de modifications appartiennent à une seule transaction, et ceci afin d'éviter que le système ne puisse se trouver dans un état incohérent (par exemple qu'une salle soit marqué comme occupé pendant un certain créneau, mais qu'elle ne figure pas dans l'emploi du temps). Bien que ce système d'information suppose un système d'exploitation permettant la persistence universelle, pour ce projet nous n'avons pas forcement accès à un tel système. Pour tester le système, il faut donc fournir un fichier a charger dans un système Common Lisp vierge afin de créer un certain nombre d'objets initiaux. Généralités =========== Objects nommées --------------- nom-mixin [classe] Cette classe mixin sert de super classe de toutes les classes ayant un nom. :nom [initarg] Le nom sous la forme d'une chaîne de caractères. nom nom-mixin [fonction générique] Renvoyer le nom sous la forme d'une chaîne de caractères. Attention: ne pas modifier la chaîne de caractères renvoyée par cette fonction. (setf nom) nouveau-nom nom-mixin [fonction générique] Modifier le nom. Attention: Aucune copie de la chaîne NOUVEAU-NOM n'est faite. Par conséquent, ne pas modifier la chaîne après l'avoir utilisée dans un appel à cette fonction. Dates ----- Pour les dates, on utilise la représentation existante Common Lisp, à savoir le nombre de secondes depuis minuit le premier janvier 1900. intervalle [classe] Représente une intervalle de temps. Le début ou la fin (ou les deux) peut ne pas exister (NIL) ce qui indique un intervalle qui dure depuis toujours et qui n'a pas de fin respectivement. :debut [initarg] indique le début de l'intervalle sous la forme d'une date Common Lisp. :fin [initarg] indique la fin de l'intervalle sous la forme d'une date Common Lisp. debut intervalle [fonction générique] Le début de l'intervalle sous la forme d'une date Common Lisp. fin intervalle [fonction générique] La fin de l'intervalle sous la forme d'une date Common Lisp. Numéro de téléphone ------------------- telephone [classe] La classe de base pour tous les numéros de téléphone. Les instances de cette classe sont immuables. :numero [initarg] Une chaîne de caractères contenant le numérod de téléphone, sans séparateurs. numero telephone [fonction générique] Étant donnée une instance de la classe TELEPHONE, renvoyer la chaîne de caractère représentant le numéro. telephone-interne [classe] Sous classe de la classe telephone. Une instance de cette classe indique un numéro de poste dans un établissement. :etablissement [initarg] L'etablissement par rapport auquel ceci est un numéro de téléphone. telephone-externe [classe] Sous classe de la classe telephone. Une instance de cette classe indique un numéro de téléphone complet, externe à l'organisation. :pays [initarg] Un objet de type pays :region [initarg] Une chaîne de caractères indiquant le code de la région. La valeur par défaut de cet initarg est NIL (utilsé pour un pays comme la France sans indicateurs de région). telephone-fixe [classe] Sous classe de la classe telephone-externe telephone-portable [classe] Sous classe de la classe telephone-externe Les lieux géographiques ======================= pays [classe] Cette classe représente un pays. C'est une sous classe de la classe NOM-MIXIN. district [classe] Cette classe représente un département ou une unité administrative similaire dans le cas d'un pays autre que la France. C'est une sous classe de la classe NOM-MIXIN. Nous l'appelons district pour éviter la confusion avec un département d'une UFR de l'université. :pays [initarg] Cet initarg s'applique à toutes les sous classes de la classe DISTRICT. Il indique le pays dans lequel est situé le district. ville [classe] Cette classe représente une ville. C'est une sous classe de la classe NOM-MIXIN. :district [initarg] Cet initarg indique le district dans lequel est située la ville. Il est utilisée uniquement dans le cas d'un pays ayant la notion équivalent à un département français. :pays [initarg] Cet initarg indique le pays dans lequel est située la ville. Il est utilisée uniquement dans le cas d'un pays n'ayant pas la notion équivalent à un département français. ville-francaise [classe] Une sous classe de la classe VILLE. district ville [fonction générique] Renvoyer le district d'une ville (un département dans le cas d'une ville française). (setf district) nouveau-district ville [fonction générique] Modifier le district (ou l'unité administrative similaire) d'une ville. Cela peut arriver à cause de changements de frontières de départements, de fusions de départements ou de découpage de départements. Exemple : Corse pays ville [fonction générique] Étant donnée une ville, renvoyer le pays dans lequel la ville est située. Pour une ville dans un pays avec la notion de district, cette fonction renvoie le pays du district de la ville. (setf pays) nouveau-pays ville [fonction générique] Modifier le pays d'une ville. Pour une ville française, c'est le pays du département de la ville qui sera modifié. adresse [classe] Cette classe représente une adresse. :texte [initarg] Détermine le numéro, la voie, etc de l'adresse sous la forme de chaîne de caractères. Cette chaîne peut contenir plusieurs lignes de texte séparées de #\Newline. :code-postal [initarg] Détermine le code postal de l'adresse sous la forme de chaîne de caractères. :ville [initarg] Détermine la ville de l'adresse sous la forme d'une instance de la classe VILLE. texte adresse [fonction générique] Étant donnée une adresse, renvoyer le texte code-postal adresse [fonction générique] Étant donnée une adresse, renvoyer le code postal ville adresse [fonction générique] Étant donnée une adresse, renvoyer la ville Les locaux ========== etablissement [classe] Cette classe représente un établissement comme une université ou une école. C'est une sous classe de la classe NOM-MIXIN. :adresse [initarg] Détermine l'adresse de l'établissement sous la forme d'une instance de la classe ADRESSE. site [classe] C'est une sous classe de la classe NOM-MIXIN. :etablissement [initarg] etablissement site [fonction générique] batiment [classe] C'est une sous classe de la classe NOM-MIXIN. :site [initarg] site batiment [fonction générique] salle [classe] La classe qui représente une salle. C'est une sous classe de la classe NOM-MIXIN. :capacite [initarg] Détermine le nombre de places dans la salle. :batiment [initarg] :equipement [initarg] capacite salle [fonction générique] (setf capacite) nouvelle-capacite salle [fonction générique] equipement salle [fonction générique] (setf equipement) nouvel-equipement salle [fonction générique] Les personnes ============= personne [classe] La classe mère de toute personne. C'est une sous classe de la classe NOM-MIXIN. :adresses [initarg] Une liste d'adresses. :telephones [initarg] Une liste de numéros de téléphone. :courriels [initarg] Une liste d'adresses de courrier électronique. Chaque élément de la liste est une chaîne de caractères. :sexe [initarg] Le symbole MASCULIN ou le symbole FEMININ. :nationalite [initarg] Une instance de la classe PAYS. :date-naissance [initarg] Une date Common Lisp. Par convention, on ne se sert pas de l'information sur les heures, les minutes et les secondes. La date indique toujours à 00:00 du jours souhaité. :lieu-naissance [initarg] Une instance de la classe VILLE. fonction [classe] La classe qui indique une fonction personnel [classe] Sous classe de personne. :fonctions [initarg] Une liste de fonctions de la personne. fonctions personnel [fonction générique] Étant donné un objet de type personnel, renvoyer une liste de ces fonctions. Cette liste ne doit pas être modifiée par une opération destructive quelconque. (setf fonctions) fonctions personnel [fonction générique] Modifier la liste des fonctions d'un objet de type personnel. *personnel* Une liste de toutes les personnes personnels du système. Une personne qui est à la fois étudiant et pesonnel figure sur les deux listes *personnel* et *etudiants*. etudiant [classe] Sous classe de la classe personne. *etudiants* [variable spéciale] Une liste de tous les étudiants du système. Une personne qui est à la fois étudiant et pesonnel figure sur les deux listes *personnel* et *etudiants*. Les composantes de l'université =============================== ufr [classe] La classe qui représente une unité de formation et de recherche. C'est une sous classe de la classe NOM-MIXIN. :departements [initarg] Une liste de départements de l'UFR. Certaines UFR n'ont pas de départements. La valeur par défaut est donc NIL. departements ufr [fonction générique] Renvoyer la liste des départements de l'UFR passée en argument. (setf departements) nouveaux-departements ufr [fonction générique] Modifier les départements d'une UFR. departement [classe] La classe qui représente une sous composante d'une UFR comme le département d'informatique. C'est une sous classe de la classe NOM-MIXIN. Programmes de formations ======================== ue [classe] Une sous classe de la classe NOM-MIXIN. Une instance de cette classe représente une unité d'enseignement. :code [initarg] Le code Apogée de l'unité d'enseignement. :objectifs [initarg] Les objectifs de l'unité d'enseignement sous la forme d'chaîne de caractères. :contenu [initarg] Le contenu de l'unité d'enseignement sous la forme d'une chaîne de caractères. code ue Étant donnée une UE, renvoyer son code Apogée. objectifs ue [fonction générique] Étant donnée une UE, renvoyer les objectifs sous la forme d'une chaîne de caractères. contenu ue [fonction générique] Étant donée une UE, renvoyer le contenu sous la forme d'une chaîne de caractères. semestre-standard [classe] Une instance de cette classe représente un ensemble d'UE qui sont normalement suivies par un étudiant pédagogiquement inscrit dans le semestre. ue-obligatoires semestre-standard [fonction générique] Étant donné un semestre standard, renvoyer une liste de toutes les UE obligatoires de ce semestre. (setf ue-obligatoires) ue semestre-standard [fonction générique] Modifier la liste des UE obligatoires d'un semestre standard. ue-choix semestre-standard [fonction générique] Étant donné un semestre standard, renvoyer une liste de toutes les UE à choix de ce semestre. (setf ue-choix) ue semestre standard [fonction générique] Modifier la liste des UE à choix d'un semestre standard. semestre-theorique [classe] Une instance de cette classe représente les UE suivies par un étudiant pendant un semestre. ue semestre-theorique [fonction générique] Étant donné un semstre théorique, renvoyer les UE du semestre. (setf ue) ue semestre-theorique [fonction générique] Modifier les UE d'un semestre théorique. parcours Une sous classe de la classe NOM-MIXIN. Les instances de cette classe représentent des sous spécialités. Exemples de parcours: informatique, mathématiques pures, mathématique-informatique. Un étudiant est inscrit dans un parcour. specialite [classe] Une sous classe de la classe NOM-MIXIN. Les instances de cette classe représentent des sous mentions. Exemples de spécialités: informatique, mathématique pures, ing mathématique, etc. parcours specialite [fonction générique] Étant donnée une spécialité, renvoyer la liste de ses parcours. Attention, ne pas modifier la liste renvoyée. (setf parcours) parcours specialite [fonction générique] Modifier les parcours d'une spécialité. mention [classe] Une sous classe de la classe NOM-MIXIN. Les instances de cette classe représentent des sous formation. Exemples de mentions: informatique, mathématique, physique, etc. specialites mention [fonction générique] Étant donnée une mention, renvoyer la liste de ses spécialités. Attention, ne pas modifier la liste renvoyée. (setf specialites) specialites mention [fonction générique] Modifier les spécialités d'une mention [fonction générique] formation [classe] Une sous classe de la classe NOM-MIXIN. La Licence sciences et technologies à l'université Bordeaux 1 est une instance de cette classe. mentions formation [fonction générique] Étant donnée une formation, renvoyer la liste de ses mentions. Attention, ne pas modifier la liste renvoyée. (setf mentions) mentions formation [fonction générique] Modifier les mentions d'une formation Candidature =========== candidature [classe] Les instances de cette classe indique des candidatures d'une personne dans un programme de formation. :candidat [initarg] La personne qui candidate. Une instance de la classe étudiant. Fonctionnalités =============== La vie d'un étudiant -------------------- * Candidature Créer un objet de type ETUDIANT. * Fiche de voeux * Inscription pédagogique * Inscription administrative * Jury d'UE * Jury de progression * Jury de mention * Jury d'obtention du diplôme * Affectation des groupes de TD Autres ------ * Emploi du temps * Répartition des enseignements * Annuaire du personnel * Annuaire des étudiants * Fiches d'UE