\documentclass[a4,compress]{beamer} %20:38 \AtBeginSection[]{ %20:38 \begin{frame}{Sommaire} %20:38 \tableofcontents[currentsection, hideothersubsections] %20:38 \end{frame} %20:38 tu balances ça avant le \begin{document} \mode { \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 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}