From cc95bb25b3ed17fe7095d4a94bcbbc1c3c4de331 Mon Sep 17 00:00:00 2001 From: Anthony Berg Date: Wed, 22 May 2024 02:43:52 +0100 Subject: [PATCH] feat(dissertation): write components design in full --- pub/dissertation/chapters/design.tex | 25 +++++++++++++++++-------- pub/dissertation/dissertation.pdf | Bin 965164 -> 965387 bytes 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/pub/dissertation/chapters/design.tex b/pub/dissertation/chapters/design.tex index 6e75532..a6c8895 100644 --- a/pub/dissertation/chapters/design.tex +++ b/pub/dissertation/chapters/design.tex @@ -4,13 +4,22 @@ %%%%% COMPONENTS %%%%% \section{Components} -Splitting up the project into multiple components has been useful for -\begin{itemize} - \item Aiding in planning to make the implementation more efficient - \item Delegating specific work tasks - \item Making the project modular, for example, allowing for a different simulator - to be implemented with minimal need to refactor other parts of the codebase -\end{itemize} +% Splitting up the project into multiple components has been useful for +% \begin{itemize} +% \item Aiding in planning to make the implementation more efficient +% \item Delegating specific work tasks +% \item Making the project modular, for example, allowing for a different simulator +% to be implemented with minimal need to refactor other parts of the codebase +% \end{itemize} + +The best way to view the design and implementation of this project is by +splitting up the project into multiple components. +This has been useful for aiding in planning the implementation, as a result +making being efficient with time and requiring less refactoring. The planning +allows for delegating specific work tasks, and making the project modular. +A benefit of making this project modular is improving the maintainability of the +codebase, and allowing for future upgrades or changes, for example, using a different +flight simulator for testing. \begin{figure}[H] \centering @@ -24,8 +33,8 @@ Splitting up the project into multiple components has been useful for \draw [<->, arrow] (plugin) -- (connector); \draw [<->, arrow] (plugin) -- (simulator); \end{tikzpicture} - \label{fig:abstract} \caption{Abstract layout of components} + \label{fig:abstract} \end{figure} Each of the components in \autoref{fig:abstract} will be covered in detail in this diff --git a/pub/dissertation/dissertation.pdf b/pub/dissertation/dissertation.pdf index cc5c848edbe3eb468dde2834e7f09d9690cc50c5..d0f56c00f30478ffe24e68db7ba008976c6bae75 100644 GIT binary patch delta 11153 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 UHJT7Vr;vak8UurzhCJH;0x4e}2LJ#7 delta 10917 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