You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
7.5 KiB
224 lines
7.5 KiB
\documentclass[11pt]{article}
|
|
\usepackage[portuguese]{babel}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{textcomp}
|
|
\usepackage{lmodern}
|
|
\usepackage{graphicx}
|
|
|
|
\setlength{\parskip}{2ex}
|
|
\def\aspa{\textquotesingle}
|
|
|
|
\setlength{\pdfpagewidth}{210truemm}
|
|
\setlength{\pdfpageheight}{297truemm}
|
|
\pdfadjustspacing=1
|
|
|
|
\topmargin -0.6in
|
|
\textheight 250truemm
|
|
|
|
\title{\vspace{8em} \huge{Wiki UFC} \\ \vspace{0.1em} \small{Projeto da Aplicação}}
|
|
\author{
|
|
\vspace{5em} \\
|
|
\small{Adriano Tavares} \\
|
|
\small{Álinson Santos} \\
|
|
\small{André Castro} \\
|
|
\small{Luís Henrique} \\
|
|
\small{Rafael Barbosa}
|
|
}
|
|
\date{5 de Junho de 2007}
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
\pagebreak
|
|
|
|
\tableofcontents
|
|
\pagebreak
|
|
|
|
% ============
|
|
% Apresentação
|
|
% ============
|
|
\section{Apresentação}
|
|
|
|
O Wiki UFC é um sistema online colaborativo onde os alunos podem compartilhar informações sobre as
|
|
disciplinas que estão cursando. Cada disciplina possui um espaço próprio, contendo um Wiki (para
|
|
receber notas de aulas), mural de mensagens (para os alunos serem notificados sobre algum evento),
|
|
calendário (contendo datas de provas, trabalhos, etc) e um repositório de arquivos (contendo provas
|
|
passadas, listas de exercicios, etc).
|
|
|
|
Neste documento, descreveremos os detalhes técnicos do sistema, incluindo informações sobre a
|
|
arquitetura utilizada, e as classes implementadas.
|
|
|
|
% ===========
|
|
% Arquitetura
|
|
% ===========
|
|
\section{Arquitetura}
|
|
|
|
O Sistema está sendo desenvolvido sobre Ruby on Rails, um framework web livre escrito na linguagem
|
|
de programação Ruby. Rails utiliza o padrão arquitetural Model-View-Controller, que, resumidamente,
|
|
separa os dados armazenados (model) da interface com o usuário (view) utilizando um componente
|
|
intermediário que implementa as regras de negócio (controller).
|
|
|
|
A seguir, iremos apresentar as classes pertencentes ao Model e ao Controller.
|
|
|
|
Vale ressaltar que o Rails possui um componente para mapeamento objeto-relacional, conhecido como
|
|
Active Record. Cada classe do Model possui uma relação no banco de dados, e cada atributo da classe
|
|
se traduz em um atributo da relação.
|
|
|
|
% =====
|
|
% Model
|
|
% =====
|
|
\section{Classes Model}
|
|
|
|
\subsection{User}
|
|
|
|
Classe que representa cada usuário do sistema. Possui informações tais como login, nome, senha,
|
|
email, e permissões de acesso.
|
|
|
|
\subsection{Course}
|
|
|
|
Classe que representa uma disciplina. Contém algumas informações básicas, como nome e descrição.
|
|
Cada objeto Course possui uma coleção de páginas wiki (WikiPage), arquivos anexos (Attachment),
|
|
mensagens (Message) e eventos (Event), além da lista de alunos inscritos na disciplina.
|
|
|
|
\subsection{Event}
|
|
|
|
Classe que modela cada evento, ou atividade, presente no calendário de uma disciplina. As
|
|
informações disponíveis são título do evento, descrição, e data.
|
|
|
|
\subsection{Attachment}
|
|
|
|
Classe que modela os arquivos anexos, tais como provas e listas de exercício. Cada Attachment possui
|
|
nome, tamanho, data de modificação, tipo, e outras informações adicionais.
|
|
|
|
No banco de dados, só são armazenados meta-dados sobre os anexos. Os arquivos em sí estão
|
|
gravados no sistema de arquivos convencional do servidor, e podem ser acessados a partir de um
|
|
endereço web.
|
|
|
|
\subsection{Message}
|
|
|
|
Classe que modela as mensagens. Cada mensagem possui título, conteúdo, destinatário, remetente, e um
|
|
tipo, que pode ser Private, Shoutbox ou Event:
|
|
|
|
\begin{description}
|
|
\item[Private Message] No Wiki UFC, um usuário pode mandar mensagens diretamente para outros
|
|
usuários. Estas mensagens possuem o tipo Private Message.
|
|
|
|
\item[Shoutbox Message] Praticamente toda página do Wiki UFC possui um Shoutbox, para permitir
|
|
que os usuários possam conversar em tempo real através do site. Cada mensagem enviada a algum
|
|
Shoutbox possui o tipo Shoubox Message. O destinatário é o id da disciplina.
|
|
|
|
\item[Event Message] Além do calendário, outra forma de comunicação do Wiki UFC é o mural de
|
|
mensagens, onde os alunos podem enviar pequenos comunicados para a página da disciplina,
|
|
informando eventos como aulas extra, ou ausência do professor, por exemplo. Estas mensagens
|
|
possuem o tipo Event Message. O destinatário é o id da disciplina.
|
|
\end{description}
|
|
|
|
\subsection{WikiPage e WikiVersion}
|
|
|
|
Classes que modelam as páginas wiki. Cada página é representada por um objeto WikiVersion, e cada
|
|
versão de uma página, por um WikiVersion. Sempre que um usuário faz alguma modificação no conteúdo
|
|
de um wiki, um novo WikiVersion é criado e anexado ao WikiPage correspondente. Os WikiVersions
|
|
antigos sempre estão disponíveis para consulta, se o usuário desejar.
|
|
|
|
Os objetos WikiVersion, além de possuírem informações como data de criação e conteúdo, também
|
|
possuem métodos para converter a sintaxe do wiki em HTML.
|
|
|
|
\subsection{Diagrama de Model}
|
|
|
|
\includegraphics[width=150truemm]{classes-model.pdf}
|
|
|
|
|
|
\pagebreak
|
|
|
|
% ==========
|
|
% Controller
|
|
% ==========
|
|
\section{Classes Controller}
|
|
|
|
Cada controller, no Ruby on Rails, implementa um conjunto de ações. Por padrão, essas ações são:
|
|
|
|
\begin{description}
|
|
\item[index] Indica a página principal do Controller
|
|
\item[list] Exibe todos os elementos cadastrados
|
|
\item[show] Mostra os detalhes de um dos elementos
|
|
\item[new] Mostra o formulário para a criação de um novo objeto
|
|
\item[create] Insere o objeto no banco de dados
|
|
\item[edit] Mostra o formulário para a edição de um objeto
|
|
\item[update] Atualiza o objeto no banco de dados
|
|
\item[destroy] Deleta um elemento do Model
|
|
\end{description}
|
|
|
|
Para simplificação, os métodos CRUD mencionados acima não serão repetidos para as classes a
|
|
seguir, uma vez que possuem comportamento semelhante.
|
|
|
|
\subsection{UserController}
|
|
|
|
Controller responsável por gerenciar os usuários. Isso inclui fazer logon e logoff, cadastrar novas
|
|
contas, alterar preferências e ressetar senhas, caso necessário.
|
|
|
|
\begin{description}
|
|
\item[signup] Método pelo qual o usuário irá se cadastrar no sistema
|
|
\item[login] Método pelo qual o usuário irá se autenticar no sistema
|
|
\item[logout] Método pelo qual o usuário irá encerrar sua sessão
|
|
\item[forgot\_password] Método a ser utilizado caso o usuário tenha perdido sua senha, enviando uma nova por email
|
|
\end{description}
|
|
|
|
\subsection{MessageController}
|
|
|
|
Controller responsável pelo envio de mensagens. Usa a estrutura padrão de Controller do Rails.
|
|
|
|
\subsection{WikiController}
|
|
|
|
Controller responsável pelas operações sobre o wiki, que incluem edição, criação de novas páginas e
|
|
consulta de históricos.
|
|
|
|
\subsection{CoursesController}
|
|
|
|
Controller responsável pelo gerenciamento de disciplina. Usa a estrutura padrão de Controller do
|
|
Rails.
|
|
|
|
\subsection{EventsController}
|
|
|
|
Controller responsável pelo manutenção de eventos no calendário. Usa a estrutura padrão de
|
|
Controller do Rails.
|
|
|
|
\subsection{AttachmentsController}
|
|
|
|
Controller responsável pelo gerenciamento de arquivos anexos a páginas. Usa a estrutura padrão de
|
|
Controller do Rails.
|
|
|
|
\subsection{Diagrama de Controller}
|
|
|
|
\includegraphics[width=150truemm]{classes-controller.pdf}
|
|
|
|
|
|
\pagebreak
|
|
|
|
% =====================
|
|
% Diagrama de Seqüencia
|
|
% =====================
|
|
|
|
\section{Diagramas de Seqüência}
|
|
|
|
\subsection{User}
|
|
\includegraphics[width=150truemm]{seq_user.png}
|
|
|
|
\subsection{Attachment}
|
|
\includegraphics[width=130truemm]{seq_attachment.png}
|
|
|
|
\subsection{Message}
|
|
\includegraphics[width=130truemm]{seq_message.png}
|
|
|
|
\subsection{Course}
|
|
\includegraphics[width=130truemm]{seq_course.png}
|
|
|
|
\subsection{Event}
|
|
\includegraphics[width=130truemm]{seq_event.png}
|
|
|
|
\subsection{Wiki}
|
|
\includegraphics[width=150truemm]{seq_wiki.png}
|
|
|
|
|
|
\end{document}
|