\documentclass{beamer}

%\documentclass{article} 
%\usepackage{beamerarticle} 
\usepackage{graphicx}

\mode<presentation>

%\setbeameroption{show notes}

\usepackage[portuguese]{babel}
\usepackage{pifont}
\usepackage{xspace}
\usepackage{graphicx}
\usepackage{algorithm}
\usepackage{algorithmic}

\title{Introdu\c{c}\~{a}o \`{a} Padr\~{o}es de Projeto}
\author{Fernando Magno Quint\~{a}o Pereira}
\date{\today}

\begin{document}

\begin{frame}
\titlepage
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{As Trilhas de Alucubaca}
{\em Toy Inc.} est\'{a} trabalhando em um jogo eletr\^{o}nico baseado em
realidade virtual -- {\em As Trilhas de Alucubaca}.
Cada jogador assinante possui um avatar que explora um universo virtual repleto
de desafios, al\'{e}m de outros avatares.
Um avatar possui uma s\'{e}rie de atributos: membros locomotores, membros de
manipula\c{c}\~{a}o, membros sensoriais, membros de comunica\c{c}\~{a}o e
unidades de racioc\'{i}nio.
Um avatar pode possuir tamb\'{e}m equipamentos: armadura(s), dinheiro,
capacete(s), bin\'{o}culo, armas de tiro, armas de corte, armas de
arremesso, comida, etc.
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 1}
Em {\em As Trilhas de Alucubaca}, avatares manipulam itens.
Um item pode ser simples ou composto.
Um item simples \'{e} algo indivis\'{i}vel como uma ponta de flecha, uma pedra
preciosa, uma corda.
Um item composto \'{e} formado de v\'{a}rios itens simples e, ou, itens
compostos.
Por exemplo, um arco \'{e} formado por uma haste de madeira e uma corda;
um colar \'{e} formado por uma corrente e v\'{a}rios adornos;
uma armadura \'{e} formada por uma placa peitoral, duas omoplatas e correias de
liga\c{c}\~{a}o.
Itens possuem alguns m\'{e}todos: \texttt{getHitPoints()} informa quanto dano
um item aguenta sem perder sua funcionalidade; \texttt{damage(int)} decrementa
alguns pontos de vida do item; \texttt{getValue()} informa o valor do item e
\texttt{add(Item)} adiciona um item em um outro item.
Como implementar items em nosso jogo?
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Composite}
\begin{center}
\includegraphics[width=\linewidth]{images/composite_uml}
\end{center}
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 2}
Alguns itens s\~{a}o criados com muita frequ\^{e}ncia.
Por exemplo, arcos e armaduras fazem parte to arsenal de quase todo 
avatar guerreiro.
Isto \'{e} um problema no projeto do software, pois o c\'{o}digo
de cria\c{c}\~{a}o dos itens passa a poluir a l\'{o}gica do jogo.
Por exemplo:
\begin{center}
\includegraphics[width=\linewidth]{images/builderEx}
\end{center}
Como separar o c\'{o}digo de cria\c{c}\~{a}o de itens do restante
do c\'{o}digo do software?
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Quest\~{a}o 3}
Agora que {\em As Trilhas de Alucubaca} tornou-se um jogo muito famoso,
os servidores come\c{c}aram a ter problemas com o consumo de
mem\'{o}ria.
Os piores gastos s\~{a}o com a implementa\c{c}\~{a}o de itens.
Muitas itens, tais como facas, moedas, panelas, etc, s\~{a}o muito parecidos, e
sua cria\c{c}\~{a}o gera muitos dados redundantes.
Como mitigar este inconveniente?
\end{frame}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
\frametitle{Flyweight}
\begin{center}
\includegraphics[width=\linewidth]{images/flyweight_uml}
\end{center}
\end{frame}

\end{document}
