Un tableur permet d'organiser des données (typiquement numériques) sous forme de grille en deux dimensions. Chaque cellule peut ainsi contenir soit une donnée brute, soit une donnée automatiquement calculée à partir du contenu des autres cellules.
Visicalc, le premier tableur
Nous allons produire une version simplifiée d'un tableur avec une feuille de calcul de 9 lignes et 9 colonnes, pouvant manipuler seulement des réels à l'aide d'une liste limitée d'opérateurs.
Vous produirez un programme écrit en Java, sans emprunt extérieur (sauf l'API officielle), et accompagné d'un rapport. Le travail sera fait en binôme ou trinôme, et devra être terminé avant le dimanche 17 mars 2024 à 23h59.
La partie logicielle sera développée dès le départ à l'aide du serveur Gitea du département. Le rapport prendra la forme d'un fichier au format PDF joint aux sources.
La feuille de calcul sera divisée en 9 colonnes (indexées de A à I) et en 9 lignes (indexées de 1 à 9), soit 81 cellules qui pourront être référencées par une combinaison de ces deux indices (par exemple B7).
Chaque cellule contient une formule (initialement vide) qui peut être modifiée par l'utilisateur sous forme de texte. Dans ce texte, les mots doivent être des constantes réelles, des références à une autre cellule (avec la notation vue plus haut), ou des opérateurs arithmétiques (+ - * /). L'ordre des mots doit respecter la notation préfixe. Par exemple, la formule suivante est syntaxiquement correcte : + 2.66 * B7 0.33.
Chaque cellule pourra être dans quatre situations possibles qui devront être visuellement distinctes :
Une formule est correcte si elle obéit aux régles de grammaire énoncées précédemment et si elle n'introduit pas de référence circulaire : le cas désagréable où on peut trouver une suite de cellules, chacune faisant référence à la suivante et la dernière faisant référence à la première.
Une formule est calculable si elle ne fait pas de division par 0 et si toutes les cellules auxquelles elle fait référence possèdent une formule correcte et calculable.
Les formules pouvant être très longues et peu lisibles, elles ne seront pas affichées dans la feuille de calcul. Dans le cas d'une cellule contenant une formule correcte et calculable, on fait le calcul correspondant et on affiche seulement le résultat.
Lorsque l'utilisateur sélectionne une cellule dans la feuille de calcul, celle-ci doit
être visuellement mise en avant et sa formule apparaîtra dans une zone d'édition dédiée.
Quand le focus est dans cette zone et l'utilisateur appuie sur la touche ↵
,
la modification de la formule est prise en compte et l'affichage de la cellule est mis à
jour.
Ceci peut avoir un effet sur d'autres cellules : vous devez bien choisir l'ordre des mises à jour. Il est recommandé (mais pas imposé) de rendre vos cellules Observable pour annoncer chaque changement de valeur aux cellules que ça intéresse.
La même formule va servir à de nombreuses reprises pour mettre à jour sa cellule. Il n'est pas raisonnable de la réinterpréter à chaque fois, donc vous devrez conserver une seconde représentation du calcul sous la forme d'un arbre de syntaxe abstraite. La construction de cet arbre aura le bénéfice supplémentaire de permettre de vérifier la syntaxe de la formule.
Les sources de votre projet (et pas les fichiers .class
)
devront être disponibles à tout moment sur le serveur Gitea du département. Votre dépôt sera privé, nommé
obligatoirement SAE32_2023
et incluera Luc Hernandez (login :
hernand
) dans la liste des collaborateurs. Le nombre de soumissions, leur
date et l'équilibre entre leurs auteurs influeront sur la note finale.
Pour chaque classe, vous prévoierez un fichier source. Suivez les
consignes habituelles
scrupuleusement. La définition de chaque classe et de chaque membre de classe sera
précédée d'un commentaire formaté pour permettre la génération de documentation technique
par l'outil javadoc
(ceci est
un exemple de fichier source bien commenté).
Vous devrez respecter l'organisation du code vue au début de l'année. Toutes vos classes
appartiendront à un package. Un fichier Makefile
devra permettre la
compilation de votre projet et la création d'une archive jar. Transcrivez bien
toutes les dépendances entre vos fichiers dans les règles.
Le rapport d'avancement prendra la forme d'un fichier PDF disponible avec les sources sur le serveur Gitea. Vous y inclurez en particulier :
Soignez la présentation ! L'orthographe, la grammaire, les pages de garde, la table des matières, les en-tête et pieds de page ne sont pas en option...
Notez bien que le rapport ne doit pas contenir d'extrait du code source du projet, étant donné que le correcteur peut aller le consulter directement s'il en éprouve le besoin. N'hésitez pas en revanche à illustrer vos propos par des schémas. Ceux-ci peuvent être construits directement dans le logiciel de traitement de texte s'il le permet, ou dans un logiciel dédié, tel que Inkscape ou Draw (tous deux gratuits). Les diagrammes de classe et d'objets seront réalisés à l'aide de StarUML.