\documentclass[a4,compress]{beamer}

%20:38 <swinia> \AtBeginSection[]{
%20:38 <swinia>   \begin{frame}{Sommaire}
%20:38 <swinia>     \tableofcontents[currentsection, hideothersubsections]
%20:38 <swinia>   \end{frame}
%20:38 <swinia> tu balances ça avant le \begin{document}



\mode<presentation>
{ \usetheme{boxes} }
\usepackage[latin1]{inputenc}
\usepackage[english,frenchb]{babel}

\usepackage{xspace}
\usepackage{slashbox}

\usetheme{Inria}
\setcounter{tocdepth}{2}

\title{Vers une traitification des collections}

\author{Guillaume Libersat (glibersat@sigill.org)}
\institute{Sous la direction de Stéphane Ducasse\\Équipe RMoD/Adam}
\date{\today}

%\pgfdeclareimage[height=1.0cm]{lifl}{lifl.jpg}
\logo{ \includegraphics[height=1cm]{adam.png}\\\includegraphics[height=1cm]{lifl.jpg}}

\bibliographystyle{alpha}

\begin{document}

\maketitle

\frame
{
  \tableofcontents  
}

\section{Introduction}

\subsection{Contexte}

\frame
{
  \frametitle{Introduction}

  \begin{itemize}
  \item Contexte
    \begin{itemize}
    \item<+-> Équipe RMoD : \og Comment aider les équipes de développement
      à maintenir et faire évoluer leurs logiciels ?\fg
      \begin{itemize}
      \item Remodularisation
      \item Constructions modulaires
      \end{itemize}
    \end{itemize}
    \medskip
  \item<+-> Les traits
  \end{itemize}
}

\subsection{Les traits}

\frame
{

  \begin{center}
    \LARGE Les Traits
  \end{center}

}

\subsection{Tour d'horizon}

\frame
{
  \frametitle{Définition, Motivations}

  \begin{quote}
    Traits : \og Unités de comportement réutilisables et composables \fg
  \end{quote}

\bigskip

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

  Motivations
  \begin{itemize}
  \item<+-> Héritage, Mixins, ...
    \begin{itemize}
    \item Duplication de code
    \item Problème du diamand
    \item Hiérarchies fragiles
    \end{itemize}
  \item<+-> Dualité des classes
  \end{itemize}
\end{column}
\begin{column}[r]{5cm}
  \includegraphics<1>[width=3cm]{fragile.jpg}
  \includegraphics<2->[width=3.5cm]{dualite.jpg}
\end{column}
\end{columns}
}


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

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

  \begin{itemize}
  \item<1-> Trait%~\cite{??}
    \begin{itemize}
    \item Pas d'état
    \item Méthodes fournies
    \item Méthodes requises
    \end{itemize}

\medskip

  \item<2-> Notions clés
    \begin{itemize}
    \item Simplicité
    \item Complémentarité
    \item Contrôle à la composition
    \item Pas d'impact sur les performances
    \end{itemize}
  \end{itemize}
\end{column}
\begin{column}[r]{4.5cm}
  \includegraphics[width=4.5cm]{simpleTrait.pdf}
\end{column}
\end{columns}

}

\subsection{Exemple}

\frame
{
  \frametitle{Traits : propriétés illustrées}
  
  \begin{center}
    Composition : aplatissement
    \includegraphics<+>[height=12.9cm]{images/traits1.png}
    \includegraphics<+>[height=12.9cm]{images/traits2.png}
    \includegraphics<+>[height=12.9cm]{images/traits3.png}
    \includegraphics<+>[height=12.9cm]{images/traits4.png}
  \end{center}

}

\frame
{
  \frametitle{Traits : propriétés illustrées (2)}
  
  \begin{center}
    Résolution de conflits : exclusion
    \includegraphics<+>[height=16cm]{images/trait_conflict1.png}
    \includegraphics<+>[height=16cm]{images/trait_conflict2.png}
    \includegraphics<+>[height=16cm]{images/trait_conflict3.png}
    \includegraphics<+>[height=16cm]{images/trait_conflict4.png}
    \includegraphics<+>[height=16cm]{images/trait_conflict5.png}
  \end{center}
}

\frame
{
  \frametitle{Traits : propriétés illustrées (3)}
  
  \begin{center}
    Résolution de conflits : aliasing
    \includegraphics<+>[height=16cm]{images/trait_conflict4.png}
    \includegraphics<+>[height=16cm]{images/trait_conflict6.png}
  \end{center}
}


\subsection{Questions}


\frame
{
  \frametitle{Introduction (2)}

 
  \begin{itemize}
 \item<+-> Problématique
    \begin{itemize}
    \item Traits efficaces
    \item Traits peu éprouvés sur les grandes hiérarchies
    \item Aucune solution satisfaisante pour les collections
    \end{itemize}
\medskip
  \item<+-> Questions posées
    \begin{itemize}
    \item Comment proposer une hiérarchie de traits pour ces cas ?
    \item Comment s'assurer que la hiérarchie sera évolutive ?
    \item Comment s'assurer que la hiérarchie restera consistante ?
    \item Quelle est la granularité idéale des traits ?
    \item Jusqu'à quel point pouvons-nous corriger les problèmes des collections ?
    \end{itemize}
\medskip
  \item<+-> Proposition
    \begin{itemize}
    \item Méthode outillée
    \item Collections de Smalltalk
    \end{itemize}
  \end{itemize}
}


\section{Analyse des collections}

\frame
{

  \begin{center}
    \LARGE Analyse Des Collections
  \end{center}

}

\subsection{Introduction}

\frame
{
  \frametitle{Les collections ?}
  \begin{quote}
    \og Une collection est un rassemblement (ou famille) d'objets.\fg -- Wikipedia
  \end{quote}

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

      \begin{itemize}
      \item<+-> En bref
        \begin{itemize}
        \item Bibliothèque
        \item Indispensable
        \end{itemize}

      \item<+-> Interrogations
        \begin{itemize}
        \item Quels problèmes ?
        \item Bonnes/Mauvaises pratiques ?
        \end{itemize}

      \item<+-> Deux cas d'étude
        \begin{itemize}
        \item Java et le \textit{JCF}
        \item Smalltalk avec \textit{Squeak}
        \end{itemize}
      \end{itemize}

    \end{column}
    \begin{column}[l]{4cm}
      \includegraphics[width=3.5cm]{timbres.jpg}
    \end{column}

  \end{columns}
}

\subsection{Résultats}

\frame
{
  \frametitle{Résultat d'analyse}

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

      \begin{itemize}
      \item<+-> Généralités
        \begin{itemize}
        \item Nombreuses classes
        \item Grande hétérogénéité
        \item Orthogonalité des caractéristiques
        \item Utilisation uniforme
        \end{itemize}
\medskip
      \item<+-> Problèmes
        \begin{itemize}
        \item Annulation de méthodes
        \item Duplication de code
        \item Pollution d'interfaces
        \item Types primitifs
        \item Réutilisation limitée
        \end{itemize}
      \end{itemize}

    \end{column}

    \begin{column}[2]{4cm}
      \includegraphics<1>[width=4cm]{heter.png}
      \includegraphics<2>[width=3cm]{rubik.png}
    \end{column}
    
  \end{columns}
}

\subsection{Souhaits}

\frame
{
  \frametitle{Ce que nous voulons}

  \begin{itemize}
  \item<+-> De bonnes propriétés...
    \begin{itemize}
    \item Bon polymorphisme
    \item Bonne capacité d'expression
    \item Bonne granularité
    \item Protocoles bien définis
    \end{itemize}

\medskip

  \item<+-> En se préparant à...
    \begin{itemize}
    \item Éviter les problèmes liés à l'héritage simple
    \item Rendre les compositions orthogonales possibles
    \item Prendre en compte l'hétérogénéité
    \end{itemize}

  \end{itemize}

}

\section{Proposition}

\frame
{

  \begin{center}
    \LARGE Proposition
  \end{center}
}


\subsection{Union}

\frame
{
  \frametitle{Les protocoles}

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

      \begin{itemize}
      \item<+-> Protocoles ?
        \begin{itemize}
        \item Regroupement par préoccupation
        \item Hiérarchique, multi-héritage
        \item Indépendant de l'implantation
        \item Standardisé
        \end{itemize}

\medskip

      \item<+-> Idéal, mais en pratique...
        \begin{itemize}
        \item Non unifié à la hiérarchie de classes
        \item Force des mauvaises pratiques pour le suivre
        \end{itemize}
      \end{itemize}

    \end{column}

    \begin{column}[2]{5cm}
      \includegraphics<1>[width=5cm]{hierar_proto.png}
      \includegraphics<2>[height=5cm]{hierar_proto_itf.png}
    \end{column}

  \end{columns}
  
}

\frame
{
  \frametitle{Union des hiérarchies}

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

      \begin{itemize}
      \item<+-> Avec les traits
        \begin{itemize}
        \item \og Héritage multiple\fg
        \item 1 trait = 1 protocole
        \item Se conformer devient facile
        \end{itemize}
        \medskip
      \item<+-> Gains
        \begin{itemize}
        \item Implantation fidèle
        \item Plus de duplications ni d'annulations
        \item Meilleure compréhension
          \begin{itemize}
          \item Développeur
          \item Utilisateur
          \end{itemize}
        \end{itemize}
    \end{itemize}
  \end{column}
  
  \begin{column}[2]{4cm}
      \includegraphics<1->[width=3cm]{merge.jpg}
  \end{column}
\end{columns}
}


\subsection{Hétérogénéité}

\subsubsection{Implantations spécifiques}

\frame
{
  \frametitle{Problèmes d'hétérogénéité}


  \begin{itemize}
  \item<+-> Multiplicité d'implantations
    \begin{itemize}
    \item Caractéristiques (e.g. \og Triable\fg) non liées à une implantation
    \item Plusieurs structures de données (e.g. Tableau, Liste
      chaînée)
    \end{itemize}

\medskip
  \item<+-> Système actuel : un trait par protocole

\medskip
  \item<+-> Résultat
    \begin{itemize}
    \item \alert{Tous les cas ne sont pas exprimables}
    \item Mène à des \alert{inconsistances de composition}
    \end{itemize}
  \end{itemize}
}

\frame
{
  \frametitle{Exemple de composition inconsistante}

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

      \begin{itemize}
      \item<+-> Exemple
        \begin{itemize}
        \item TSortable : \og Tableau\fg
        \item TGrowable : \og Liste Chaînée\fg
        \item Quid de SortableLinkedList ?
        \end{itemize}
\medskip
      \item<+-> Conclusion
        \begin{itemize}
        \item<alert@2> Un trait par structure de données, pour
          chaque caractéristique
        \item Exemple : TSortableArray, TSortableLinkedList
        \end{itemize}
      \end{itemize}

     
    \end{column}

    \begin{column}[2]{5cm}
      \includegraphics<1->[width=5.5cm]{comp_incons.pdf}
    \end{column}

  \end{columns}
}

\subsubsection{Nécessité des protocoles}

\frame
{
  \frametitle{De la nécessité des protocoles}
  \begin{itemize}
  \item Plusieurs traits par protocole
    \begin{itemize}
    \item Implantations différentes mais même fonction
    \item Respect du protocole, polymorphisme ?
    \item Cohérence sémantique ?
    \item Facilité de compréhension, d'extension ?
    \end{itemize}
  \end{itemize}
}

\frame
{
  \frametitle{Consistance protocolaire}

  \begin{itemize}
  \item<+-> Traits-protocoles
    \begin{itemize}
    \item Donne corps aux protocoles
    \item Assure le respect des messages
    \item Documente automatiquement les implantations
    \end{itemize}
  \end{itemize}
  
  \begin{center}
    \includegraphics[width=8cm]{trait_proto.pdf}
  \end{center}

  \begin{itemize}
  \item<+-> En pratique
    \begin{itemize}
    \item Chaque implantation le compose
    \item Redéfinition des méthodes
    \item Facilité de débogage
    \end{itemize}
  \end{itemize}

}

\frame
{
  \frametitle{Consistance sémantique}

  \begin{columns}
    \begin{column}[l]{6cm}
  
      \begin{itemize}
      \item<+-> Consistance nécessaire ?
        \begin{itemize}
        \item Messages assurés par les traits-protocoles
        \item Consistance sémantique ?
        \end{itemize}
        
        \medskip
        
      \item<+-> Ajout de contrats
        \begin{itemize}
        \item Spécification de contraintes par le protocole
        \item Implanteurs soumis à ces contraintes
        \item Détection des compositions inconsistantes
        \end{itemize}
      \end{itemize}
    
    \end{column}
    \begin{column}[2]{4cm}
      \includegraphics<2->[width=4cm]{rails.jpg}
    \end{column}

  \end{columns}
  
}

\frame
{
  \frametitle{Contrats et traits}

  \begin{itemize}
  \item<+-> Pas de support du modèle
    \begin{itemize}
    \item Redéfinition, Aliasing, ...
    \end{itemize}
\medskip
  \item<+-> Extension proposée
    \begin{itemize}
    \item \textbf{Invariants} : 
      $(invariant_{trait 1} \land ... \land
      invariant_{trait n}) \land invariant_{composeur}$
      \medskip
    \item<+-> \textbf{Pré-conditions} : 
      $(precond_{trait 1} \lor ... \lor
      precond_{trait n}) \lor precond_{composeur}$
    \item<+-> \textbf{Post-conditions} : 
      $(postcond_{trait 1} \land ... \land
      postcond_{trait n}) \land postcond_{composeur}$
    \end{itemize}
  \end{itemize}
}

\frame
{
  \frametitle{Exemple de détection des inconsistances}

  \begin{center}
    \includegraphics[height=6.5cm]{inv_viol.pdf}
  \end{center}

}

\subsection{Pollution/Ouverture}

\frame
{
  \frametitle{Pollution et ouverture}

\begin{columns}
  \begin{column}[l]{8cm}
    
  \begin{itemize}
  \item<+-> Principalement due aux convertisseurs
    \begin{itemize}
    \item \#asPostcript, \#utf8toISO, ...
    \item Jusqu'à 50\% des méthodes d'une classe
    \item Occulte les méthodes intéressantes
    \end{itemize}
  \end{itemize}
  

  \begin{itemize} 
  \item<+-> Convertisseurs génériques
    \begin{itemize}
    \item Deux types de conversions
      \begin{itemize}
      \item De contenu : \#encodeWith:
      \item De conteneur : \#convertWith:
      \end{itemize}
    \item<3-> Protocoles utilisateurs
    \item<3-> Convertisseurs implantant les protocoles
    \item<3-> Support dans OBBrowser
    \end{itemize}
  \end{itemize}
  
\end{column}

\begin{column}[2]{5cm}
  \includegraphics<3->[width=4.5cm]{proto_user.png}
\end{column}

\end{columns}

}

\frame{
  \frametitle{Convertisseurs génériques : exemple}

  \begin{center}
    \includegraphics[height=6.5cm]{conv.pdf}
  \end{center}

}

\subsection{Affinage}

\frame
{
  \frametitle{Affinage des protocoles}

\begin{columns}
  \begin{column}[l]{8cm}
  
  \begin{itemize}
  \item<+-> Granularité cruciale
    \begin{itemize}
    \item Flexibilité de la hiérarchie
    \item Degré de compréhension
    \item Difficile à définir
    \end{itemize}
  \end{itemize}

  \begin{itemize}
  \item<+-> Méthode outillée, 3 étapes
    \begin{enumerate}
    \item Détermination des caractéristiques
    \item Création d'un protocole minimaliste
    \item Affinage par le concepteur
    \end{enumerate}
  \end{itemize}

\end{column}

\begin{column}[2]{4cm}
  \includegraphics<2->[width=3cm]{marteau.png}
\end{column}

\end{columns}

}

\subsubsection{Méthode}

\frame
{
  \frametitle{Méthode, étape 1}
  
  \textit{Détermination des caractéristiques par classe}

\medskip

\begin{center}
  \begin{tabular}{|l|c|c|c|c|c|}
    \hline
    \backslashbox{Carac.}{Classe} & Array & String & Stack & Set &
    ... \\
    \hline
    Iterable & $\surd$ & $\surd$ & $\surd$ & $\surd$ & ...\\
    \hline
    Growable & ~ & ~ & ~ & $\surd$ & ...\\
    \hline
    Indexable & $\surd$ & $\surd$ & $\surd$ & ~ & ...\\
    \hline
    Poppable & ~ & ~ & $\surd$ & ~ & ...\\
    \hline
    ... & ... & ... & ... & ... & ... \\
    \hline
  \end{tabular}
\end{center}

}

\frame
{
  \frametitle{Méthode, étape 2}

  \textit{Algorithme de détermination de hiérarchie minimale}

\medskip

  3 étapes
  \begin{enumerate}
  \item Créer des protocoles selon les associations assimilées identiques
  \item Ordonner les protocoles selon leur relation de couverture (
    $\prec$ ) \\
    $E_n$ = $\{$ Classe $|$ Classe utilise $n$ $\}$ \\
    $p$ $\prec$ $p'$ ssi $E_p$ $\subset$ $E_{p'}$
    % $P \subset P' \Leftrightarrow \forall c (c \in Classes_P \Rightarrow c \in
    % Classes_{P'})$;
  \item Pour chaque protocole, privilégier les liens indirects
\end{enumerate}


}

\frame
{
  \frametitle{Méthode, étape 2 (2)}

  \textit{Algorithme de détermination de hiérarchie minimale}

  \begin{center}
    \includegraphics[width=9cm]{gen_proto.png}
  \end{center}
  
}

\frame
{
  \frametitle{Méthode, étape 3}

  \textit{Affinage de la hiérarchie de protocoles générée}

  \begin{center}
    \includegraphics[width=7cm]{proto.png}
  \end{center}
  
}


\section{Conclusion}

\subsection{Synthèse}

\frame
{
  \frametitle{Synthèse}

  Modèle permettant de refactoriser les collections

  \begin{itemize}
  \item<+-> Unification des vues structurelles
    \begin{itemize}
    \item Règle les problèmes liés à l'héritage simple
    \item Améliore la compréhension
    \end{itemize}

  \item<+-> Traits-protocoles
    \begin{itemize}
    \item Gestion de l'hétérogénéité
    \item Amélioration de la consistance polymorphique et sémantique
    \end{itemize}

  \item<+-> Convertisseurs et protocoles utilisateurs
    \begin{itemize}
    \item Pollution d'interfaces
    \end{itemize}

  \item<+-> Amélioration des protocoles
    \begin{itemize}
    \item Meilleure expressivité
    \item Outillage de détermination de granularité
    \end{itemize}
  \end{itemize}

}

\subsection{Perspectives}

\frame
{
  \frametitle{Perspectives}

  \begin{itemize}
  \item<+-> Mettre en oeuvre la refactorisation
    \begin{itemize}
    \item Post-doc
    \end{itemize}
\medskip
  \item<+-> Identifier des patrons
    \begin{itemize}
    \item Pour les traits
    \item Pour les collections
    \end{itemize}
\medskip
  \item<+-> Traits dynamiques
  \end{itemize}
}

\subsection{Questions}

\frame
{
  \frametitle{Questions ?}

\Large
  \begin{center}
    Merci pour votre attention,
  \end{center}

\bigskip

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


}

\end{document}
