mirror of
https://github.com/LucasVbr/interpreteur-lir.git
synced 2026-05-13 17:21:52 +00:00
MAJ dossier : conception
This commit is contained in:
Binary file not shown.
@@ -5,6 +5,7 @@
|
|||||||
\usepackage[top=1.5cm, bottom=4cm]{geometry}
|
\usepackage[top=1.5cm, bottom=4cm]{geometry}
|
||||||
\usepackage{fancyhdr, graphicx, array, hyperref}
|
\usepackage{fancyhdr, graphicx, array, hyperref}
|
||||||
\usepackage{glossaries}
|
\usepackage{glossaries}
|
||||||
|
|
||||||
%\usepackage[onehalfspacing]{setspace}
|
%\usepackage[onehalfspacing]{setspace}
|
||||||
%\usepackage{pdfpages}
|
%\usepackage{pdfpages}
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
\par Ce chapitre contient les diagrammes de classes représentant le logiciel codé. Les diagrammes de l'itération trois ont été complétés à partir du code pour ajouter les détails d'intégration dans le diagrammes (méthodes privées par exemple).
|
\par Ce chapitre contient les diagrammes de classes représentant le logiciel codé. Les diagrammes de l'itération trois ont été complétés à partir du code pour ajouter les détails d'intégration dans le diagrammes (méthodes privées par exemple).
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.donnees(.litteraux)}
|
\section{Paquetage interpreteurlir.donnees(.litteraux)}
|
||||||
\includegraphics[scale=0.55]{./img/COO/PackageDonnees}
|
\begin{center}\includegraphics[scale=0.55]{./img/COO/PackageDonnees}\end{center}
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.expressions}
|
\section{Paquetage interpreteurlir.expressions}
|
||||||
\includegraphics[scale=0.55]{./img/COO/PackageExpression}
|
\begin{center}\includegraphics[scale=0.55]{./img/COO/PackageExpression}\end{center}
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.programmes}
|
\section{Paquetage interpreteurlir.programmes}
|
||||||
\includegraphics[scale=0.55]{./img/COO/PackageProgrammes}
|
\begin{center}\includegraphics[scale=0.55]{./img/COO/PackageProgrammes}\end{center}
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.motscles}
|
\section{Paquetage interpreteurlir.motscles}
|
||||||
\includegraphics[scale=0.60]{./img/COO/PackageMotscles}
|
\begin{center}\includegraphics[scale=0.60]{./img/COO/PackageMotscles}\end{center}
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.motscles.instructions}
|
\section{Paquetage interpreteurlir.motscles.instructions}
|
||||||
\includegraphics[scale=0.60]{./img/COO/PackageInstruction}
|
\begin{center}\includegraphics[scale=0.60]{./img/COO/PackageInstruction}\end{center}
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir}
|
\section{Paquetage interpreteurlir}
|
||||||
\includegraphics[scale=0.55]{./img/COO/PackageInterpreteurlir}
|
\begin{center}\includegraphics[scale=0.55]{./img/COO/PackageInterpreteurlir}\end{center}
|
||||||
@@ -1,29 +1,29 @@
|
|||||||
\par L'objectif de l'itération 1 était un prototype qui devait premièrement pouvoir se lancer et s'éteindre. De plus le prototype devait pouvoir gérer (mémorisation, affectation) des données de type chaines. Les commandes debut, defs, fin et l'instruction var ont donc été ajoutés afin d'obtenir ces fonctionnalités.
|
\par L'objectif de l'itération 1 était un prototype qui devait premièrement pouvoir se lancer et s'éteindre. De plus le prototype devait pouvoir gérer (mémorisation, affectation) des données de type chaines. Les commandes debut, defs, fin et l'instruction var ont donc été ajoutés afin d'obtenir ces fonctionnalités.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.donnees.litteraux}
|
\section{Paquetage interpreteurlir.donnees.litteraux}
|
||||||
\includegraphics[scale=0.75]{./img/COO/COO_prototype_1/PackageLitteraux}
|
\begin{center}\includegraphics[scale=0.75]{./img/COO/COO_prototype_1/PackageLitteraux}\end{center}
|
||||||
\par Le choix de conception des littéraux a été une classe parente Litteral qui permet d'englober tous les types de données du programme.
|
\par Le choix de conception des littéraux a été une classe parente Litteral qui permet d'englober tous les types de données du programme.
|
||||||
La classe Entier a été détaillé dans la conception cependant elle n'a pas été codée à cette itération pour se concentrer sur les chaînes.
|
La classe Entier a été détaillé dans la conception cependant elle n'a pas été codée à cette itération pour se concentrer sur les chaînes.
|
||||||
Les littéraux sont immuables pour permettre leur passage sans problème.
|
Les littéraux sont immuables pour permettre leur passage sans problème.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.donnees}
|
\section{Paquetage interpreteurlir.donnees}
|
||||||
\includegraphics[scale=0.65]{./img/COO/COO_prototype_1/PackageDonnees}
|
\begin{center}\includegraphics[scale=0.65]{./img/COO/COO_prototype_1/PackageDonnees}\end{center}
|
||||||
\par Pour les données une classe variable a été choisie composée d'un littéral et d'un identificateur.
|
\par Pour les données une classe variable a été choisie composée d'un littéral et d'un identificateur.
|
||||||
L'identificateur a comme classes dérivées les deux types affectables du projet soit les entiers et les chaînes.
|
L'identificateur a comme classes dérivées les deux types affectables du projet soit les entiers et les chaînes.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.expressions}
|
\section{Paquetage interpreteurlir.expressions}
|
||||||
\includegraphics[scale=0.60]{./img/COO/COO_prototype_1/PackageExpressions}
|
\begin{center}\includegraphics[scale=0.60]{./img/COO/COO_prototype_1/PackageExpressions}\end{center}
|
||||||
\par Comme pour le reste de notre conception les expressions sont typées et sont une spécialisation d'une classe Expression générale regroupant les comportements communs. Une méthode de classe d'Expression permet de créer le bon type d'expression.
|
\par Comme pour le reste de notre conception les expressions sont typées et sont une spécialisation d'une classe Expression générale regroupant les comportements communs. Une méthode de classe d'Expression permet de créer le bon type d'expression.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.motscles}
|
\section{Paquetage interpreteurlir.motscles}
|
||||||
\includegraphics[scale=0.60]{./img/COO/COO_prototype_1/PackageMotscles}
|
\begin{center}\includegraphics[scale=0.60]{./img/COO/COO_prototype_1/PackageMotscles}\end{center}
|
||||||
\par La conception de l'itération 1 contient ce qui devait être faits lors de cette itération à quelques détaille près comme la classe InstructionAffiche qui n'a pas été codée car non nécessaire aux fonctionnalités choisies.
|
\par La conception de l'itération 1 contient ce qui devait être faits lors de cette itération à quelques détaille près comme la classe InstructionAffiche qui n'a pas été codée car non nécessaire aux fonctionnalités choisies.
|
||||||
L'itération 1 voulait permettre de manier des chaînes il fallait donc que les commandes connaissent le contexte contenant les variables. La solution choisie a été une attribut d'instance dans Commande initialiser à la construction de la commande par passage de la référence du contexte global par le constructeur. Une instance de commande correspond à un objet ayant toutes les informations nécessaire pour être exécuté (String arguments dans le constructeur). Les commandes et instructions fonctionnent en 2 temps, la construction qui valide les arguments et créer les éléments nécessaires à l'exécution puis l'exécution qui est la réalisation du comportement de la commande.
|
L'itération 1 voulait permettre de manier des chaînes il fallait donc que les commandes connaissent le contexte contenant les variables. La solution choisie a été une attribut d'instance dans Commande initialiser à la construction de la commande par passage de la référence du contexte global par le constructeur. Une instance de commande correspond à un objet ayant toutes les informations nécessaire pour être exécuté (String arguments dans le constructeur). Les commandes et instructions fonctionnent en 2 temps, la construction qui valide les arguments et créer les éléments nécessaires à l'exécution puis l'exécution qui est la réalisation du comportement de la commande.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir}
|
\section{Paquetage interpreteurlir}
|
||||||
\includegraphics[scale=0.60]{./img/COO/COO_prototype_1/PackageInterpreteurlir}
|
\begin{center}\includegraphics[scale=0.60]{./img/COO/COO_prototype_1/PackageInterpreteurlir}\end{center}
|
||||||
\par Le contexte regroupe l'entièreté des variables définies dans la session courante. Une variable n'est accessible que par l'intermédiaire du contexte grâce à l'identificateur qui sert de clé. L'Analyseur est la classe qui permet le fonctionnement de tout. Une mainLoop permet de demander en continue une ligne à l'utilisateur puis celle-ci est analyser, à partir du mot clé une commande/instruction est crée en passant le reste de la ligne en argument. L'analyse des arguments se fait au niveau le plus interne possible (Analyseur analyse le mot cle, la commande les arguments qui construit ensuite les éléments dont elle a besoin qui s'occupe eux-mêmes de vérifier leur validité à la construction). Si une erreur dans la ligne à interprété est détecté alors une InterpreteurException est levée et se propage jusqu'à l'analyseur qui affiche l'erreur.
|
\par Le contexte regroupe l'entièreté des variables définies dans la session courante. Une variable n'est accessible que par l'intermédiaire du contexte grâce à l'identificateur qui sert de clé. L'Analyseur est la classe qui permet le fonctionnement de tout. Une mainLoop permet de demander en continue une ligne à l'utilisateur puis celle-ci est analyser, à partir du mot clé une commande/instruction est crée en passant le reste de la ligne en argument. L'analyse des arguments se fait au niveau le plus interne possible (Analyseur analyse le mot cle, la commande les arguments qui construit ensuite les éléments dont elle a besoin qui s'occupe eux-mêmes de vérifier leur validité à la construction). Si une erreur dans la ligne à interprété est détecté alors une InterpreteurException est levée et se propage jusqu'à l'analyseur qui affiche l'erreur.
|
||||||
|
|
||||||
\section{Illustration avec des diagrammes d'objets}
|
\section{Illustration avec des diagrammes d'objets}
|
||||||
\includegraphics[scale=0.50]{./img/COO/COO_prototype_1/Objet}
|
\begin{center}\includegraphics[scale=0.50]{./img/COO/COO_prototype_1/Objet}\end{center}
|
||||||
\par Voici des diagrammes qui ont été faits pendant la réflexion de cette conception. Ils permettent d'illustrer le fait qu'une instruction créer les éléments dont elle a besoin. Seul changement dans la conception par rapport à ces diagrammes : les opérateurs sont gérer en interne des instructions (il n'y pas de classe Operateur).
|
\par Voici des diagrammes qui ont été faits pendant la réflexion de cette conception. Ils permettent d'illustrer le fait qu'une instruction créer les éléments dont elle a besoin. Seul changement dans la conception par rapport à ces diagrammes : les opérateurs sont gérer en interne des instructions (il n'y pas de classe Operateur).
|
||||||
@@ -3,10 +3,11 @@
|
|||||||
\section{Diagrammes d'objets}
|
\section{Diagrammes d'objets}
|
||||||
Comme conseillé par notre tuteur, nous avons commencé la conception de l'itération 2 par des diagrammes d'objets. Ci-dessous quelques exemples.
|
Comme conseillé par notre tuteur, nous avons commencé la conception de l'itération 2 par des diagrammes d'objets. Ci-dessous quelques exemples.
|
||||||
\par
|
\par
|
||||||
\includegraphics[scale=0.5]{./img/COO/COO_prototype_2/digrammesObjet/Diagramme d'objet la commande liste}
|
\begin{center}\includegraphics[scale=0.5]{./img/COO/COO_prototype_2/digrammesObjet/Diagramme d'objet la commande liste}
|
||||||
|
\end{center}
|
||||||
\par Le premier montre que la commande liste fait appel au programme (contenant les lignes de codes constituant un programmes) pour exécuter son comportement.
|
\par Le premier montre que la commande liste fait appel au programme (contenant les lignes de codes constituant un programmes) pour exécuter son comportement.
|
||||||
\par
|
\par
|
||||||
\includegraphics[scale=0.5]{./img/COO/COO_prototype_2/digrammesObjet/Diagramme d'objet de la commande efface}
|
\begin{center}\includegraphics[scale=0.5]{./img/COO/COO_prototype_2/digrammesObjet/Diagramme d'objet de la commande efface}\end{center}
|
||||||
\par La commande efface connait donc les deux étiquettes qui définissent sont comportement spécifique d'instance. Pour sont exécution elle doit connaitre le programme global de la session courante de l'interpréteur LIR.
|
\par La commande efface connait donc les deux étiquettes qui définissent sont comportement spécifique d'instance. Pour sont exécution elle doit connaitre le programme global de la session courante de l'interpréteur LIR.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.donnees(.litteraux)}
|
\section{Paquetage interpreteurlir.donnees(.litteraux)}
|
||||||
@@ -16,17 +17,17 @@ Comme conseillé par notre tuteur, nous avons commencé la conception de l'itér
|
|||||||
\par Comme pour les données, pas de changement de conception mais programmtion de ExpressionEntier.
|
\par Comme pour les données, pas de changement de conception mais programmtion de ExpressionEntier.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.programmes}
|
\section{Paquetage interpreteurlir.programmes}
|
||||||
\includegraphics[scale=0.5]{./img/COO/COO_prototype_2/PackageProgrammes}
|
\begin{center}\includegraphics[scale=0.5]{./img/COO/COO_prototype_2/PackageProgrammes}\end{center}
|
||||||
\par Premièrement la classe étiquette permet d'ordonner les lignes de codes. Le Programme contient des méthodes pour tous les comportement qu'il doit réaliser ce qui permet de les intégrés en interne ce qui rend leur usage plus simple pour les commandes et instructions. Seul la méthode vaen est absente de la conception car nous nous sommes rendu compte qu'elle était nécessaire pendant la programmation. Autre changement, le programme doit enregistrés les lignes de codes. La conception montre une classe LigneCode prévue à cet effet cependant sur le conseil de notre tuteur nous avons utilisé une TreeMap<Etiquette, Instruction> ce qui a rendu LigneCode obsolète. La classe avait été programmée et testée mais nous l'avons supprimée car TreeMap était une meilleur solution.
|
\par Premièrement la classe étiquette permet d'ordonner les lignes de codes. Le Programme contient des méthodes pour tous les comportement qu'il doit réaliser ce qui permet de les intégrés en interne ce qui rend leur usage plus simple pour les commandes et instructions. Seul la méthode vaen est absente de la conception car nous nous sommes rendu compte qu'elle était nécessaire pendant la programmation. Autre changement, le programme doit enregistrés les lignes de codes. La conception montre une classe LigneCode prévue à cet effet cependant sur le conseil de notre tuteur nous avons utilisé une TreeMap<Etiquette, Instruction> ce qui a rendu LigneCode obsolète. La classe avait été programmée et testée mais nous l'avons supprimée car TreeMap était une meilleur solution.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.motscles}
|
\section{Paquetage interpreteurlir.motscles}
|
||||||
\includegraphics[scale=0.45]{./img/COO/COO_prototype_2/PackageCommande}
|
\begin{center}\includegraphics[scale=0.45]{./img/COO/COO_prototype_2/PackageCommande}\end{center}
|
||||||
\par Les commandes à ajouter à cette itération ont été ajoutée à la conception en suivant le même principe de la dualité construction/exécution. Seul changement notable (non montré dans le diagramme car décidé pendant la programmation), l'ajout du programme nécessite que les commandes connaissent celui-ci. Après une longue réflexion nous avons choisis de le déclaré comme attribut protected dans la classe Commande et de le référencer au lancement de l'interpréteur sans savoir si c'était un bon choix ou non.
|
\par Les commandes à ajouter à cette itération ont été ajoutée à la conception en suivant le même principe de la dualité construction/exécution. Seul changement notable (non montré dans le diagramme car décidé pendant la programmation), l'ajout du programme nécessite que les commandes connaissent celui-ci. Après une longue réflexion nous avons choisis de le déclaré comme attribut protected dans la classe Commande et de le référencer au lancement de l'interpréteur sans savoir si c'était un bon choix ou non.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.motscles.instructions}
|
\section{Paquetage interpreteurlir.motscles.instructions}
|
||||||
\includegraphics[scale=0.45]{./img/COO/COO_prototype_2/PackageInstruction}
|
\begin{center}\includegraphics[scale=0.45]{./img/COO/COO_prototype_2/PackageInstruction}\end{center}
|
||||||
\par Aucun changement notable, seulement ajout des nouvelles instructions.
|
\par Aucun changement notable, seulement ajout des nouvelles instructions.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir}
|
\section{Paquetage interpreteurlir}
|
||||||
\includegraphics[scale=0.45]{./img/COO/COO_prototype_2/PackageInterpreteurlir}
|
\begin{center}\includegraphics[scale=0.45]{./img/COO/COO_prototype_2/PackageInterpreteurlir}\end{center}
|
||||||
\par Ajout de l'exception ExecutionException lancée pour une erreur à l'exécution comme une division par 0 (contrairement à l'InterpreteurException qui est lancée à la construction). Elle également affichée par l'Analyseur.
|
\par Ajout de l'exception ExecutionException lancée pour une erreur à l'exécution comme une division par 0 (contrairement à l'InterpreteurException qui est lancée à la construction). Elle également affichée par l'Analyseur.
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
\par L'itération 3 à ajoutée les expressions booléennes avec l'instruction si vaen. Et les commandes permettent d'enregistrer et charger un programme LIR dans l'interpréteur (commande charge et sauve).
|
\par L'itération 3 à ajoutée les expressions booléennes avec l'instruction si vaen. Et les commandes permettent d'enregistrer et charger un programme LIR dans l'interpréteur (commande charge et sauve).
|
||||||
|
|
||||||
\section{Diagrammes d'objets}
|
\section{Diagrammes d'objets}
|
||||||
\includegraphics[scale=0.80]{./img/COO/COO_prototype_3/digrammesObjet/charge}
|
\begin{center}\includegraphics[scale=0.80]{./img/COO/COO_prototype_3/digrammesObjet/charge}\end{center}
|
||||||
\par Les commandes sauve et charge sont liées au programme pour pouvoir charger ou récupérer des lignes de codes. Ces commandes connaissent une chaînes de texte correspondant au chemin du fichier.
|
\par Les commandes sauve et charge sont liées au programme pour pouvoir charger ou récupérer des lignes de codes. Ces commandes connaissent une chaînes de texte correspondant au chemin du fichier.
|
||||||
\par
|
\par
|
||||||
\includegraphics[scale=0.75]{./img/COO/COO_prototype_3/digrammesObjet/siVaen}
|
\begin{center}\includegraphics[scale=0.75]{./img/COO/COO_prototype_3/digrammesObjet/siVaen}\end{center}
|
||||||
\par L'instruction si a besoin pour fonctionner d'une ExpressionBooleenne et de connaitre le contexte pour chercher les valeurs des variables à comparer. Elle doit connaitre l'étiquette où aller si la condition est vraie et donc du programme pour appeler la méthode du programme vaen.
|
\par L'instruction si a besoin pour fonctionner d'une ExpressionBooleenne et de connaitre le contexte pour chercher les valeurs des variables à comparer. Elle doit connaitre l'étiquette où aller si la condition est vraie et donc du programme pour appeler la méthode du programme vaen.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.donnees(.litteraux)}
|
\section{Paquetage interpreteurlir.donnees(.litteraux)}
|
||||||
\includegraphics[scale=0.40]{./img/COO/COO_prototype_3/PackageDonnees}
|
\begin{center}\includegraphics[scale=0.40]{./img/COO/COO_prototype_3/PackageDonnees}\end{center}
|
||||||
\par Le type booléen hérite de Litteral pour garder la logique de Litteral pouvant référencer chaque type de valeur du programme.
|
\par Le type booléen hérite de Litteral pour garder la logique de Litteral pouvant référencer chaque type de valeur du programme.
|
||||||
|
|
||||||
\section{Paquetage interpreteurlir.expressions}
|
\section{Paquetage interpreteurlir.expressions}
|
||||||
\includegraphics[scale=0.45]{./img/COO/COO_prototype_3/PackageExpression}
|
\begin{center}\includegraphics[scale=0.45]{./img/COO/COO_prototype_3/PackageExpression}\end{center}
|
||||||
\par L'expression booléenne ne s'obtient pas avec la méthode determinerExpression car celle-ci est utilisée que par si vaen qui utilise que ce type d'expression. Le constructeur d'ExpressionBooleenne est donc utilisé directement.
|
\par L'expression booléenne ne s'obtient pas avec la méthode determinerExpression car celle-ci est utilisée que par si vaen qui utilise que ce type d'expression. Le constructeur d'ExpressionBooleenne est donc utilisé directement.
|
||||||
|
|
||||||
\section{Diagramme de classe général}
|
\section{Diagramme de classes général}
|
||||||
\includegraphics[scale=0.35]{./img/COO/COO_prototype_3/Scéma général simplifié}
|
\begin{center}\includegraphics[scale=0.35]{./img/COO/COO_prototype_3/Scéma général simplifié}\end{center}
|
||||||
\par Les commandes sauve et charge ont été ajoutés à la conception mais sont similaires aux autres commandes. Pareil pour l'instruction si vaen. Ce diagramme général permet de voir l'ensemble de la conception pour ce qui est des associations et généralisation des classes.
|
\par Les commandes sauve et charge ont été ajoutés à la conception mais sont similaires aux autres commandes. Pareil pour l'instruction si vaen. Ce diagramme général permet de voir l'ensemble de la conception pour ce qui est des associations et généralisation des classes.
|
||||||
Reference in New Issue
Block a user