\chapter{An\'alisis de requisitos, dise\~no e implementaci\'on}\label{requisitos}

A lo largo de este Cap\'itulo~\ref{requisitos} describiremos por un lado el dise\~no e implementaci\'on de la clase \texttt{pclass.cls}. Resulta sencillo adivinar por su extensi\'on \textbf{.cls} que est\'a implementada en lenguaje \LaTeX{}, esto se debe a de que dicho lenguaje reserva esta extensi\'on para sus clases.
Por otro lado tambi\'en tendr\'a cabida en este cap\'itulo un apartado dedicado al An\'alisis de Requisitos. Haremos uso
de dicho apartado para especificar los requisitos m\'inimos que a nuestro juicio debe cumplir una clase, teniendo dicha
clase como objetivo el formateo de memorias relativas a proyectos de fin de carrera. 

Sin embargo adem\'as de los requisitos m\'inimos citados en el p\'arrafo anterior, tambi\'en se har\'a referencia a funcionalidades adicionales que se han a\~nadido a trav\'es del formato definido en \texttt{pclass}. Todas estas 
funcionalidades que se han a\~nadido tendr\'an un mismo objetivo, simplificar al m\'aximo al usuario de la clase \texttt{pclass} todas las tareas que conlleva la redacci\'on de una memoria de proyecto de final de carrera. 
\\



\section{Dise\~no e implementaci\'on}
En lo que respecta al Dise\~no de la clase que da origen a este proyecto, resultar\'a necesaria inicialmente la 
participaci\'on del tutor del proyecto, Jos\'e Ram\'on Portillo Fern\'andez. De este modo el tutor nos indicar\'a una serie 
de referencias para poder iniciar el dise\~no e implementaci\'on de nuestra propia clase \LaTeX{}. Esta participaci\'on  se fundamenta en dos motivos principalmente:

\begin{enumerate}
	
	\item En el hecho de que la tem\'atica de este proyecto sea una de las propuestas ofertadas por el departamento de
				Matem\'atica Aplicada para el curso 2007/2008, llevada a cabo por Jos\'e Ram\'on Portillo Fern\'andez.

	\item La carencia de conocimientos previos de los autores de este proyecto acerca del lenguaje de programaci\'on \LaTeX{}.
				Este hecho har\'a que la creac\'ion de la clase \texttt{pclass} constituya nuestro primer contacto con el citado	
			  lenguaje.

\end{enumerate}

Como el t\'itulo de este proyecto indica el lenguaje utilizado para implementar la clase \texttt{pclass} es \LaTeX{}. 
Esta decisi\'on se basa en las innumerables ventajas que puede ofrecer a sus usuarios dicho lenguaje. Para conocer m\'as 
acerca de esta serie de ventajas puedes hechar un vistazo al Cap\'itulo~\ref{intro} de esta memoria o recurrir a fuentes 
bibliogr\'aficas como \cite{primpasos}.

Es importante resaltar que la implementaci\'on de \texttt{pclass} la hemos realizado simult\'aneamente en dos sistemas 
operativos. Estos sistemas operativos son concretamente Windows y Linux, habiendo usado en cada uno de ellos el entorno
de desarrolo descrito m\'as adelante. La raz\'on de este paralelismo en la implementaci\'on no es mas que conocer de 
primera mano los distintos inconvenientes que derivan de cada una de las plataformas usadas. De esta forma nos 
beneficiamos del conocimiento de ambas plataformas, y podemos ofrecer al usuario de la clase \texttt{pclass} una 
soluci\'on a los problemas que surgen de forma com\'un.

En lo relativo al entorno de desarrollo empleado diferenciaremos evidentemente entre el usado para Windows y el 
respectivo para Linux.


Empezaremos describiendo el entorno de desarrollo empleado bajo Windows:

\begin{description}
		\item[MiK\TeX{}] Es la versi\'on m\'as popular de \LaTeX{} para Windows y la puedes bajar desde 
										\url{http://www.miktex.org}. Desde ah\'i bajas un \emph{Setup Wizard} que, una vez instalado, 
										se conecta a internet para bajar e instalar el resto del programa.
		
		\item[\TeX{}nicCenter] Es un editor de texto especializado para \LaTeX{} con botones y ventanas,
													muy intuitivo y f\'acil de usar. Este programa, altamente recomendable, lo puedes
													bajar en la direcci\'on \url{http://www.toolscenter.org/products/texniccenter/}.
		
		\item[Adobe Acrobat Reader] Visor de documentos recomendable si quieres generar y ver tu memoria en el formado 
															\texttt{PDF} (\emph{Portable Document Format}). Puede encontararse en la direcci\'on: 
															\url{http://www.adobe.com/products/acrobat}.
		
		\item[AFPL Ghostscript y GSview] Ambos son visores de documentos que te permitir\'an manipular archivos 
																		\emph{PostScript}. Ambos programas los puedes conseguir en la p\'agina de 
																		Internet \url{http://www.cs.wisc.edu/~ghost/}.
		
\end{description}

En el caso de Linux las descripciones del entorno de desarrollo usado son:

\begin{description}
		\item[TexLive] Se trata de una actualizaci\'on del paquete Te\TeX{}. Incluye todo lo necesario, excepto 
									el editor, para poder escribir los documentos \LaTeX{}. Adem\'as incorpora soluciones a bugs y 
									mejoras respecto a su antecesor. Puedes encontrarlo en \url{http://www.tug.org/texlive/acquire.html}. 
		
		\item[Kile] Editor de texto para \LaTeX{} en el cual dispodemos de autocompletado de comandos, coloreado de sintaxis,
		 						marca autom\'aticamente los comandos \LaTeX{} y resalta los par\'entesis, y puede trabajar
		 						con m\'ultiples ficheros a la vez. Adem\'as tambi\'en proporciona plantillas y patrones para facilitar 
								la creaci\'on de documentos.
		
		\item[Adobe Acrobat Reader] Al igual que para windows es un visor de documentos para generar y ver tu memoria en el 
																formado \texttt{PDF}.
		
\end{description}




\section{An\'alisis de requisitos}
En este apartado de An\'alisis de Requisitos enunciaremos una serie de requisitos que cumple la clase \texttt{pclass}.
Todos estos requisitos perseguir\'an una \'unica meta, la consecuci\'on de una memoria de proyecto de fin de carrera 
que reuna todas las especificaciones relativas al formato caracter\'istico de este tipo de documentos.

Adem\'as de cumplir los requisitos relativos al formato del documento, la clase \texttt{pclass} tambi\'en posee
diversas funcionalidades encaminadas a facilitar al usuario de la clase el cumplimiento de estos requisitos de 
formato. Por tanto esta serie de funcionalidades, como no puede ser de otra forma, tambi\'en ser\'an contempladas a lo 
largo del apartado que nos ocupa.

\subsubsection{Portada}
Un requisito indispensable a la hora de elaborar la documentaci\'on de un proyecto de fin de carrera, es generar una
portada edecuada. Cuando hablamos de una portada adecuada nos referimos a que \'esta cumpla las directrices relativas
al formato indicadas por la Universidad de Sevilla.

En \LaTeX{} para la genereci\'on de este tipo de portadas hay que recurrir inevitablemente a una importante sucesi\'on 
de comandos. Por este motivo en la clase \texttt{pclass} se ha definido una macro llamada \verb+\hacerportada+, que 
contendr\'a la suces\'ion de comandos necesaria. De esta forma se facilita la tarea al usuario de la clase, ya que con
un solo comando obtendr\'a una portada perfectamente formateada. El formato para la portada definido en \texttt{pclass}
puedes visualizarlo en la Figura~\ref{formatportada}.

\figura{1}{img/portada}{Formato definido en pclass para la portada}{formatportada}{}

Sin embargo para generar ls portada el usuario deber\'a indicar una serie de datos. \'Estos ser\'an usados con el fin 
de rellenar la portada con la informaci\'on adecuada en cada caso. Para espeficar esta informaci\'on el usuario tendr\'a
que completar al comienzo del archivo proyect.tex los comandos que podemos observar en el c\'odigo siguiente:

\codigofuente{TeX}{Datos para completar la portada}{codigo/datosportada}

Si tienes alguna duda sobre como completar estos comandos puedes echar un vistazo al Cap\'itulo~\ref{manual}.

Hemos mencionado ya que la macro \verb+\hacerportada+ esconde tras de s\'i una sucesi\'on de comandos para generar
una portada con el formato adecuado. Esta sucesi\'on de comandos puedes visualizarla en el c\'odigo mostrado mas 
adelante. Si quieres conocer m\'as acerca de la finalidad de cada uno de estos comandos puedes hacerlo en el
Cap\'itulo~\ref{clasepfc}.

\codigofuente{TeX}{Macro para hacer la portada}{codigo/macroportada}{}

\subsubsection{Resumen}
Toda memoria que se precie debe contar al inicio de la misma con un resumen del proyecto. Con el fin de record\'arselo
al usuario de la clase \texttt{pclass}, dentro del archivo \texttt{proyect.tex} en la secci\'on perteneciente a \verb+\frontmatter+
puedes encontrar la l\'inea \verb+\input{resumen.tex}+. Esta l\'inea se encragar\'a de insertar en la memoria un \texttt{.tex}
que contiene el resumen del proyecto. Puedes localizar la insercci\'on del resumen en la captura de C\'odigo: Contenido 
de frontmatter.

\codigofuente{TeX}{Contenido de frontmatter}{codigo/frontmatter}{}



\subsubsection{Agradecimientos}
Al igual que ocurre con el Resumen, toda memoria debe contener unas p\'aginas para agradecimientos. Con el fin de 
record\'arselo al usuario de la clase \texttt{pclass}, dentro del archivo \texttt{proyect.tex} en la secci\'on perteneciente a \verb+\frontmatter+ puedes encontrar la l\'inea \verb+\input{agradecimientos.tex}+. Este comando insertar\'a al comienzo
de la memoria una secci\'on dedicada a los agradecimientos. Puedes localizar la insercci\'on de los agradecimientos en 
la captura de C\'odigo: Contenido de frontmatter.

\subsubsection{\'Indice General}
Un requisito indispensable para una memoria de proyecto es la existencia de un \'indice general de contenidos. Para 
que dicho \'indice aparezca en la memoria, se hace uso del comando \verb+\tableofcontents+. Puedes localizar este comando
en la secci\'on perteneciente a \verb+\frontmatter+ dentro de proyect.tex. Para verlo m\'as claro puedes ver la
captura C\'odigo: Contenido de frontmatter.

\subsubsection{\'Indice de cuadros y Figuras}
Resulta tambi\'en indispensable la existencia de un \'indice de cuadros y otro de figuras. Usamos los comandos
\verb+\listoftables+ y \verb+\listoffigures+, dentro del frontmatter de proyect.tex, para generar ambos \'indices.
Puedes verlo con mayor claridad en la captura C\'odigo: Contenido de frontmatter.

Para facilitar las tareas de insercci\'on de cuadros y figuras, las cuales quedan reflejadas en los \'indices mencionados,
hemos definido en nuestra clase una macro para cada una de estas tareas. Concretamente se trata de las macros 
\verb+\cuadro+ y \verb+\figura+, puedes ver el c\'odigo con el que son definidas en la captura siguiente.

\codigofuente{TeX}{Macros cuadro y figura}{codigo/tablafigura}{}


\subsubsection{\'Indice de c\'odigo}

No es una condici\'on imprescindible la aparici\'on en una memoria de un \'indice de capturas de c\'odigo. Sin embargo
en los proyectos de titulaciones pertenecientes a la Escuela T\'ecnica Superior de Ingenier\'ia Inform\'atica, aparecen 
una cantidad importante de capturas de c\'odigo. Por este motivo hemos considerado que puede ser de gran 
utilidad definir un \'indice de capturas de c\'odigo. 

Para que quede reflejado este \'indice en la memoria se incluye el comando \verb+\lstlistoflistings+ en el frontmatter 
del archivo \texttt{proyect.tex}, puedes localizar esta instrucci\'on en la captura C\'odigo: Contenido de frontmatter.
Adem\'as de esto para materializar esta definici\'on se han incluido las sentencias mostradas a continuaci\'on dentro de nuestra clase \texttt{pclass.cls}.

\codigofuente{TeX}{Comandos para generar el \'indice de c\'odigo}{codigo/indcodigo}{}

Por otra parte tambi\'en hemos querido facilitar al m\'aximo la insercci\'on de capturas de c\'odigo fuente. Para ello
hemos recurrido al paquete \texttt{listings}, definiendo bas\'andonos en \'el la macro \verb+\codigofuente+. 

Con esta macro conseguimos que el usuario inserte f\'acilmente capturas consistentes en el contenido  de archivos \LaTeX{},
de igual forma podremos hacerlo con archivos que contengan muchos otros lenguajes de programaci\'on. Para insertar una captura bastar\'a con hacer uso de la macro citada, indicando en sus argumentos el nombre del archivo deseado, el 
lenguaje de programaci\'on usado en el mismo y el t\'itulo con el que aparecer\'a la captura.
 
Si quieres conocer algo m\'as acerca de este tema puedes encontrar m\'as informaci\'on en el Capitulo~\ref{clasepfc}. 
En la captura siguiente puedes encontrar todas las definiciones realizadas en \texttt{pclass} relativas al
paquete \texttt{listings}.
\\
\\
\\
\\
\codigofuente{TeX}{Definiciones relativas al paquete listings}{codigo/deflistings}{}



\subsubsection{Ap\'endices}
Resulta imprescindible que en toda memoria se reserve un espacio dedicado a posibles ap\'endices. Para ello
en el archivo \texttt{proyect.tex} realizaremos, siempre tras el comando \verb+\backmatter+ y antes de
\verb+\end{document}+, tantos \verb+\input+ o \verb+\includes+ como necesitemos para la inclusi\'on de los
ap\'endices que sean necesarios. En nuestro caso hemos incluido en nuestro proyecto un ap\'endice dedicado a la licencia
GNU, adem\'as de la bibliograf\'ia que tambi\'en constituye un ap\'endice. Puedes verlo m\'as claro en la captura 
siguiente.

\codigofuente{TeX}{Ap\'endices}{codigo/apendices}{}


\subsubsection{Bibliograf\'ia}
Otro de los apartados que resultan clave en una memoria de proyecto es el dedicado a referencias bibliogr\'aficas.
No es necesraio que el usuario se preocupe por la forma en que se escriben los datos de los libros en la secci\'on de referencias bibliogr\'aficas, \LaTeX{} hace eso de manera autom\'atica. 

Existes varios estilos bibliogr\'aficos predefinidos en \LaTeX{}, sin embargo paralelamente a \texttt{pclass} hemos 
creado nuestro propio estilo para la biliograf\'ia. De esta forma a trav\'es de nuestro estilo que recibe el nombre de \texttt{pfcbibstyle}, podemos ajustar todos los aspectos referentes a la bibliograf\'ia seg\'un nuestras preferencias y necesidades. Para conocer m\'as detalles acerca de la creaci\'on de \texttt{pfcbibstyle} y de las ventajas que nos 
proporciona puedes consultar el Cap\'itulo~\ref{clasepfc}.

Para incluir la secci\'on de bibliograf\'ia en la memoria, ser\'an necesarios una serie de comandos dentro del apartado \verb+\backmatter+ del archivo \texttt{proyect.tex}. Estos comandos son concretamente: 
	
\begin{enumerate}
	\item \verb+\bibliographystyle{pfcbibstyle}+\\
				Con este comando indicamos el estilo que queremos aplicar a nuestra bibliograf\'ia. En este caso, como ya hemos
				mencionado, se tratar\'a del estilo \texttt{pfcbibstyle}.  
	
	\item \verb+\bibliography{pfcbib}+\\
				Con esta sentencia indicamos el nombre del archivo \texttt{.bib} que contiene los datos de todas nuestras referencias
				bibliogr\'aficas. En nustro caso se tratar\'a del archivo \texttt{pfcbib}. Este archivo podemos considrerarlo como 
				una base de datos de nuestros libros, a la que \LaTeX{} recurrir\'a para obtener todos los datos necesarios 
				para generar la bibliograf\'ia.
\end{enumerate}

En el fragmento de c\'odigo mostrado seguidamente podr\'as visualizar claramente c\'omo se incluye la bibliograf\'ia 
en \texttt{proyect.tex}.

\codigofuente{TeX}{Comandos para incluir la bibliograf\'ia}{codigo/biblio}{}

 