\documentclass[a4,compress]{beamer}

\usepackage[latin1]{inputenc}
\usepackage[english,frenchb]{babel}

\usepackage{xspace}

\usetheme{Inria}

\title{Traits : Unités comportementales composables}
\subtitle{Nathanael Schärli, S. Ducasse, O. Nierstrasz, A. P. Black}

\author{Guillaume Libersat (glibersat@sigill.org)}
\institute{Équipe ADAM/RMoD}
\date{\today}

%\titlegraphic{\pgfimage[height=0.6cm]{inria} }

\pgfdeclareimage[height=1.0cm]{lifl}{lifl}
\pgfdeclareimage[height=1.0cm]{bob}{bobleponge}
\pgfdeclareimage[height=1.0cm]{ustl}{ustl}
\logo{ \pgfuseimage{ustl} \\ \pgfuseimage{lifl}} %\pgfuseimage{bob} }

\bibliographystyle{alpha}

\begin{document}

\maketitle

%\frame
%{
%  \tableofcontents  
%}

\section{Introduction}

\subsection{Contexte}

\frame
{
  \frametitle{Contexte}
  
  Programmation orienté-objet (OOP)
  \begin{itemize}
  \item Héritage fondamental
  \item Aucune solution parfaite
  \item Domaine de recherche de longue date
  \end{itemize}

\bigskip
\pause

  3 approches principales
  \begin{itemize}
  \item Héritage simple
  \item Héritage multiple
  \item Mixins
  \end{itemize}
}

\subsection{Héritage simple}

\frame
{
  \frametitle{Héritage simple}

\begin{columns}[l]
\column{8cm}

  Héritage simple
  \begin{itemize}
  \item Méthode simple
  \item Utilisé dans beaucoup de langages ``récents''
  \item Peu satisfaisant (duplication, interfaces, ...)
  \end{itemize}

\column{3cm}

%  \includegraphics[height=4cm]{images/herit_simple.jpg}

\end{columns}


}

\frame
{
  \frametitle{Héritage simple : exemple}

  \includegraphics<1>[height=6cm]{images/single1.png}
  \includegraphics<2>[height=6cm]{images/single2.png}
  \includegraphics<3>[height=6cm]{images/single3.png}
}

\subsection{Héritage multiple}

\frame
{
  \frametitle{Héritage multiple}

\begin{columns}[l]
\column{8cm}

  Héritage multiple
  \begin{itemize}
  \item<1-> Parfait dans l'esprit
  \item<2-> Mais problématique depuis des années
  \item<3-> Problème du diamant (fork-join problem)
  \item<3-> Référence à la super-classe
  \item<3-> Nécessite un algorithme de linéarisation
  \end{itemize}

\column{3cm}
%  \includegraphics<3->[height=4cm]{images/diamond.jpg}


\end{columns}
\pause
\pause
\pause

\bigskip
  Conclusion :
  \begin{quote}
    ``Multiple inheritance is good, but there is no good way to do
    it'' ~\cite{Cook87a}
  \end{quote}

}

\frame
{
  \frametitle{Héritage multiple, exemple}

  \includegraphics<1>[height=6cm]{images/multiple1.png}
  \includegraphics<2>[height=6cm]{images/multiple2.png}
  \includegraphics<3>[height=6cm]{images/multiple3.png}
}

\subsection{Bilan}

\frame
{
  \frametitle{Psychanalyse ?}

\begin{columns}[l]
\column{7cm}

  Bilan...
  \begin{itemize}
  \item Aucune solution satisfaisante
  \end{itemize}

\bigskip
\pause

  Problème, Schizophrénie ?
  \begin{itemize}
  \item Classes utilisées pour l'instanciation
  \item Classes utilisées pour la réutilisation
  \end{itemize}


\column{3cm}
%\includegraphics<2->[height=4cm]{images/schizo.jpg}

\end{columns}

\pause
\bigskip
  Conclusion
  \begin{itemize}
  \item Besoin d'unités spécifiques à la réutilisation
  \item Classes = générateurs
  \end{itemize}
}

%\subsection{Les mixins}

%\frame
% {
%   \frametitle{Mixin}

%   Mixin
%   \begin{itemize}
%   \item Classe dédiée à la réutilisation
%   \end{itemize}
    
% \bigskip

%   Problèmes
%   \begin{itemize}
%   \item Utilise l'opérateur d'héritage
%   \item Résolution des conflits implicite
%   \item Pas de contrôle de composition
%   \item Hiérarchie frêle
%   \end{itemize}

% }


\section{Les traits}

\subsection{Tour d'horizon}

\frame
{
  \frametitle{Notre proposition}

  Les traits
  \begin{itemize}
  \item Cousins des mixins
  \item Même but (réutilisation, ...)
  \item Règle les problèmes des mixins
  \end{itemize}

\pause
\bigskip

  Esprit
  \begin{itemize}
  \item Simplicité
  \item Contrôle au compositeur
  \item Pas d'impact sur les performances
  \end{itemize}
}


\frame
{
  \frametitle{Les traits, concrètement}

  Trait ?
  \begin{itemize}
  \item<1-> Ensemble de méthodes (petite classe)
  \item<2-> Pas d'état (pas de variable d'instance)
  \item<3-> Spécifie un ensemble de méthodes requises
  \end{itemize}

\bigskip
\pause
\pause
\pause

  Propriétés
  \begin{itemize}
  \item Composition (classe+traits)
  \item Aplatissement
\pause
  \item Aliasing
  \item Résolution explicite
  \end{itemize}
}

\subsection{Exemples}

\frame
{
  \frametitle{Traits : exemple de composition}

  \includegraphics<1>[height=12cm]{images/traits1.png}
  \includegraphics<2>[height=12cm]{images/traits2.png}
  \includegraphics<3>[height=12cm]{images/traits3.png}
  \includegraphics<4>[height=12cm]{images/traits4.png}
}

\frame
{
  \frametitle{Traits : conflits}

  \includegraphics<1>[height=13cm]{images/trait_conflict1.png}
  \includegraphics<2>[height=13cm]{images/trait_conflict2.png}
  \includegraphics<3>[height=13cm]{images/trait_conflict3.png}
  \includegraphics<4>[height=13cm]{images/trait_conflict4.png}
  \includegraphics<5>[height=13cm]{images/trait_conflict5.png}
  \includegraphics<6>[height=13cm]{images/trait_conflict4.png}
  \includegraphics<7>[height=13cm]{images/trait_conflict6.png}
}

\subsection{Validation}

\frame
{
  \frametitle{Validation}

  Validation
  \begin{itemize}
  \item Implanté en Squeak
\pause
  \item Re-factorisation de la hiérarchie des ``Collection''
    \begin{itemize}
    \item A l'origine : 21 classes (duplication, ...)
\pause
    \item Résultat :
      \begin{itemize}
      \item 48 traits, 567 méthodes
\pause
      \item 10\% de lignes en moins
      \item 12\% plus petite
      \end{itemize}
    \end{itemize}
  \end{itemize}
}

%\subsection{Discussion}

%\frame
%{
%  \frametitle{Discussion}

  

%}

\section{Conclusion et perspectives}

\frame
{
  \frametitle{Conclusion et perspectives}

  Conclusion
  \begin{itemize}
  \item Extension idéale à l'héritage simple
  \item Ne casse pas la compatibilité
  \item Ne souffre pas des problèmes de l'héritage multiple
  \end{itemize}

\bigskip
\pause

  Perspectives
  \begin{itemize}
  \item Évaluation avec les ``namespaces''
  \item Considérer des traits avec état
  \item Remplacer l'héritage ?
\pause
  \item Modifier le comportement au run-time
  \item Re-factoriser des hiérarchies très complexes
  \end{itemize}
}


\frame
{
  \frametitle{Questions ?}


  \begin{center}
    Des questions ?    
  \end{center}

  Références
  \bibliography{vie}  

}

\frame
{
  \frametitle{Critique}

  Sur le fond
  \begin{itemize}
  \item Idée intéressante
  \item Eiffel ?
  \end{itemize}

\pause

  Sur la forme
  \begin{itemize}
  \item Bien écrit
  \item Clair, bien expliqué
  \item Un peu trop répétitif
  \item Long
  \end{itemize}

}


\end{document}
