\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}