Petit Tableur

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.

capture d'écran de Visicalc
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.

Fonctionnalités

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 :

  • La cellule contient une formule vide
  • La cellule contient une formule correcte et calculable
  • La cellule contient une formule correcte mais incalculable
  • La cellule contient une formule incorrecte

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.

exemple d'arbre

Sources

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.

Rapport

Le rapport d'avancement prendra la forme d'un fichier PDF disponible avec les sources sur le serveur Gitea. Vous y inclurez en particulier :

  • le nom des membres du groupe,
  • une introduction contenant une brève description du sujet,
  • la description des fonctionnalités de votre programme, aidée de captures d'écran,
  • une présentation de la structure du programme, avec diagramme de classes simplifié à l'appui,
  • une explication des classes participant à l'arbre de syntaxe abstraite, basée sur un exemple concret et un diagramme d'objets,
  • une exposition de l'algorithme qui détecte les références circulaires.
  • une énumération des structures de données abstraites vues en cours utilisées dans votre projet,
  • une conclusion personnelle pour chaque auteur.

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.

retour à la page d'accueil

retour au sommet