L histoire d_enseignante_du_moyen_orient_smcla2011
An article about a teacher from the Middle East who taught in Egypt. It includes 10 photos showing the teacher interacting with her students in classrooms and on field trips over the years. The photos provide a glimpse into her career as an educator in the region.
Este documento describe diferentes tipos de instituciones jurídicas como las instituciones que componen un ordenamiento jurídico y el derecho comparado. Explica que las instituciones jurídicas, familiares, sociales y económicas tienen una importancia fundamental para establecer las bases sociales y regular situaciones entre particulares y las relaciones del estado. Además, señala que las instituciones jurídicas pueden variar con el tiempo debido a la evolución de las necesidades de la sociedad.
Cómo queremos que sea el final de nuestra vida copiaJeferzon Carbajal
Este documento resume los diferentes tipos de muerte, incluyendo la muerte natural causada por la vejez y la muerte violenta causada por un trauma o suicidio. También discute las perspectivas sociales y culturales sobre la muerte, así como las concepciones filosóficas de la muerte como un proceso biológico inevitable o como el propósito final de la vida humana.
Este documento proporciona instrucciones sobre cómo crear, copiar, mover, duplicar, eliminar y seleccionar diapositivas en PowerPoint. Explica los pasos para insertar una nueva diapositiva, copiar una diapositiva existente, moverse entre diapositivas usando las flechas del teclado, duplicar diapositivas insertándolas debajo de otras seleccionadas, eliminar diapositivas seleccionadas y seleccionar múltiples diapositivas manteniendo presionada la tecla Mayús.
Este documento presenta un Master en Asesoría de Empresas. El objetivo del programa es formar profesionales capaces de asesorar a pequeñas y medianas empresas de forma integral en temas contables, fiscales, financieros y laborales. El programa está dirigido a titulados universitarios, profesionales interesados en el funcionamiento de las PYMES, y directivos que deseen ampliar sus conocimientos. El contenido incluye módulos de contabilidad general, plan general de contabilidad, asesoría fiscal, derecho laboral, y seguridad
Este documento habla sobre los códigos QR y su uso en la educación. Los códigos QR fueron creados en 1994 por una compañía japonesa y almacenan grandes cantidades de datos numéricos y alfanuméricos. Proveen información adicional a través de enlaces a páginas web, podcasts, videos, mapas y tareas. Existen varias herramientas gratuitas para generar códigos QR y enlazarlos a diferentes tipos de contenido digital.
Données et délivrabilité : anticiper et corrigerNP6
L’exploitation grandissante des données utilisateurs par les fournisseurs de messagerie force aujourd’hui les expéditeurs à affiner la connaissance de leurs destinataires. Quels sont les domaines les plus sensibles sur ce sujet ? Quelles données exploitent les fournisseurs de messagerie ? De quels outils dispose-t-on pour identifier les différents types de cibles ? Quels sont les plans d’action en cas de chute de réputation ?
Java es un lenguaje de programación orientado a objetos, concurrente y portable. Tiene características como ser simple, orientado a objetos, distribuido, robusto, seguro, indiferente a la arquitectura, multihilo, dinámico y de alto rendimiento. Java incluye ocho tipos de datos primitivos (byte, short, int, long, float, double, boolean, char) y varios operadores como unarios, de incremento, lógicos y de concatenación.
En esta actividad realice un cuadro resumen que en donde se establecen ciertos aspectos fundamentales contenidos en el informe de educación realizado en los 90, otorgado por el comité asesor de educación presidido por José Joaquín Brünner.
L histoire d_enseignante_du_moyen_orient_smcla2011
An article about a teacher from the Middle East who taught in Egypt. It includes 10 photos showing the teacher interacting with her students in classrooms and on field trips over the years. The photos provide a glimpse into her career as an educator in the region.
Este documento describe diferentes tipos de instituciones jurídicas como las instituciones que componen un ordenamiento jurídico y el derecho comparado. Explica que las instituciones jurídicas, familiares, sociales y económicas tienen una importancia fundamental para establecer las bases sociales y regular situaciones entre particulares y las relaciones del estado. Además, señala que las instituciones jurídicas pueden variar con el tiempo debido a la evolución de las necesidades de la sociedad.
Cómo queremos que sea el final de nuestra vida copiaJeferzon Carbajal
Este documento resume los diferentes tipos de muerte, incluyendo la muerte natural causada por la vejez y la muerte violenta causada por un trauma o suicidio. También discute las perspectivas sociales y culturales sobre la muerte, así como las concepciones filosóficas de la muerte como un proceso biológico inevitable o como el propósito final de la vida humana.
Este documento proporciona instrucciones sobre cómo crear, copiar, mover, duplicar, eliminar y seleccionar diapositivas en PowerPoint. Explica los pasos para insertar una nueva diapositiva, copiar una diapositiva existente, moverse entre diapositivas usando las flechas del teclado, duplicar diapositivas insertándolas debajo de otras seleccionadas, eliminar diapositivas seleccionadas y seleccionar múltiples diapositivas manteniendo presionada la tecla Mayús.
Este documento presenta un Master en Asesoría de Empresas. El objetivo del programa es formar profesionales capaces de asesorar a pequeñas y medianas empresas de forma integral en temas contables, fiscales, financieros y laborales. El programa está dirigido a titulados universitarios, profesionales interesados en el funcionamiento de las PYMES, y directivos que deseen ampliar sus conocimientos. El contenido incluye módulos de contabilidad general, plan general de contabilidad, asesoría fiscal, derecho laboral, y seguridad
Este documento habla sobre los códigos QR y su uso en la educación. Los códigos QR fueron creados en 1994 por una compañía japonesa y almacenan grandes cantidades de datos numéricos y alfanuméricos. Proveen información adicional a través de enlaces a páginas web, podcasts, videos, mapas y tareas. Existen varias herramientas gratuitas para generar códigos QR y enlazarlos a diferentes tipos de contenido digital.
Données et délivrabilité : anticiper et corrigerNP6
L’exploitation grandissante des données utilisateurs par les fournisseurs de messagerie force aujourd’hui les expéditeurs à affiner la connaissance de leurs destinataires. Quels sont les domaines les plus sensibles sur ce sujet ? Quelles données exploitent les fournisseurs de messagerie ? De quels outils dispose-t-on pour identifier les différents types de cibles ? Quels sont les plans d’action en cas de chute de réputation ?
Java es un lenguaje de programación orientado a objetos, concurrente y portable. Tiene características como ser simple, orientado a objetos, distribuido, robusto, seguro, indiferente a la arquitectura, multihilo, dinámico y de alto rendimiento. Java incluye ocho tipos de datos primitivos (byte, short, int, long, float, double, boolean, char) y varios operadores como unarios, de incremento, lógicos y de concatenación.
En esta actividad realice un cuadro resumen que en donde se establecen ciertos aspectos fundamentales contenidos en el informe de educación realizado en los 90, otorgado por el comité asesor de educación presidido por José Joaquín Brünner.
Some Pitfalls with Python and Their Possible Solutions v1.0Yann-Gaël Guéhéneuc
Python is a very popular programming language that comes with many pitfalls. This presentation describes some of these pitfalls, especially when they could trick unsuspecting object-oriented developers. It proposes solutions to these pitfalls, in particular regarding inheritance, which is easily broken because of the implementation choice of Python for explicit delegation, its method resolution order, and its use of the C3 algorithm. It discusses some advantages of using Python, especially regarding meta-classes.
Advice for writing a NSERC Discovery grant application v0.5Yann-Gaël Guéhéneuc
NSERC Discovery grant applications are judged according to four criteria: (1) Excellence of the researcher, (2) Merit of the proposal, (3) Contribution to the training of HQP, and (4) Cost of research. Each criterion has six possible merit indicators: Exceptional, Outstanding, Very strong, Strong, Moderate, and Insufficient. This presentation describes the process from a candidate's point of view and a reviewer's point of view. It discusses funding decisions, including bins and ER vs. ECR. It gives some advice, including graduating PhD students, having a story, and limiting the number of main objectives.
Ptidej Architecture, Design, and Implementation in Action v2.1Yann-Gaël Guéhéneuc
A set of process, architecture, design, and implementation patterns from a real, large program, the Ptidej Tool Suite. This set shows concrete problems and their solutions in Java. It includes: Be A Profiler, Tests as Documentation, Multi-layered Architecture, Proxy Console, Proxy Disk, Hidden Language, Internal Observer, Run-time Deprecation, String Parsimony, Object Identity, Object Address, Final Construction, StringBuffer as Positioning Element.
Examples of (bad) consequences of a lack of software quality and some solutions. This presentation presents some examples of (bad) consequences of a lack of software quality, in particular how poor software quality led to the direct deaths of 89 people. It then provides some background on software quality, especially the concept of Quality Without a Name. It then discusses many principles, their usefulness, and their positive consequences on software quality. Some of these principles are well-known in object-oriented programming while many others are taken from the book 97 Programmers. They include: abstraction, encapsulation, inheritance, types, polymorphism, SOLID, GRASP, YAGNI, KISS, DRY, Do Not Reinvent the Wheel, Law of Demeter, Beware of Assumptions, Deletable Code, coding with reason, and functional programming. They pertain to dependencies, domains, and tools.
(In details: Beautify is Simplicity, The Boy Scout Rule, You Gotta Care About the Code, The Longevity of Interim Solutions, Beware the Share, Encapsulate Behaviour not Just State, Single Responsibility Principle, WET Dilutes Performance Bottlenecks, Convenience Is Not an -ility, Code in the Language of the Domain, Comment Only What the Code Cannot Say, Distinguish Business Exception from Technical, Prefer Domain-specific Types to Primitive Types, Automate Your Coding Standards, Code Layout Matters, Before You Refactor, Improve Code by Removing It, Put the Mouse Down and Step Away from the Keyboard)
Some Pitfalls with Python and Their Possible Solutions v0.9Yann-Gaël Guéhéneuc
Python is a very popular programming language that comes with many pitfalls. This presentation describes some of these pitfalls, especially when they could trick unsuspecting object-oriented developers. It proposes solutions to these pitfalls, in particular regarding inheritance, which is easily broken because of the implementation choice of Python for explicit delegation, its method resolution order, and its use of the C3 algorithm. It discusses some advantages of using Python, especially regarding meta-classes.
An Explanation of the Unicode, the Text Encoding Standard, Its Usages and Imp...Yann-Gaël Guéhéneuc
Unicode is currently the world standard for encoding text. It supports all of the world's major writing systems. With its version 15.1 of 2023/09/12, it defines 149,813 characters and 161 scripts. This presentation starts with the, seemingly, simple example of the polar bear emoji. It then defines the key terms of any such standard. It then asks how a software system can render orthographic characters into glyphs, i.e., to render characters into (combined) glyphs. It introduces the concept of abstract characters and describes a brief history of encoding standards, from ASCII to Unicode. It shows how, by adding one level of indirection, the Unicode standard answers this question. It then presents code examples to display text written in Unicode: HarfBuzz (for shaping) and FreeType (for rendering).
An Explanation of the Halting Problem and Its ConsequencesYann-Gaël Guéhéneuc
The halting problem is an important, famous, and consequential problem in computer science. It is about writing a program that decides if another problem will stop. There is no general solution to this problem, which shows that such a problem is undecidable, with important consequences: for example, it is not possible to write tests that would exhaustively test entirely an arbitrary program. This presentation was written in collaboration with <a href="https://www.iro.umontreal.ca/~hahn/">Gena Hahn</a>.
A presentation summarising FPGAs, their history, their benefits, and showing how to program them. It provides some historical background on the development of computers, from the Difference Engine to the Intel 4004 to the AMD Ryzen Threadripper PRO 3995WX. It shows how the number of transistors increased dramatically but also how this increase led to more complexity and more bugs. It then introduces Field-programmable gate arrays (FPGA) as an alternative. It then presents how to program such FPGA using data-flow graphs. It discusses some tools (Yosys, NextPnR, and IceStorm) and illustrates them with a typical "Hello World" (i.e., blinking an LED) using Cygwin on Windows 10.
A set of brief presentations of some of the women and men who made the history of computer science and software engineering.
- 1936: Alan Turing
- 1948: Claude Elwood Shannon
- 1950: Grace Murray Hopper
- 1960: John McCarthy
- 1966: Frances E. Allen
- 1967: Ole-Johan Dahl
- 1967: Kristen Nygaard
- 1969: Charles A. R. Hoare
- 1970: Edgar F. Codd
- 1972: Dave Parnas
- 1974: Manny Lehman
- 1975: Frederick Brooks
- 1986: Edward Yourdon
- 1987: Barbara Liskov
- 1994: Erich Gamma
- 1997: Grady Booch
- 2001: Butler Lampson
A tutorial on the history, use, and caveats of Java generics. Using the simple example of an interface for sort algorithms, the tutorial presents the history of generics and describes the problems being solved by generics. It also provides definitions, and examples in Java and C++, and discusses Duck Typing. It then describes two scenarios: (1) Scenario 1: you want to enforce type safety for containers and remove the need for typecasts when using these containers and (2) Scenario 2: you want to build generic algorithms that work on several types of (possibly unrelated) things. It also summarises caveats with generics, in particular type erasure.
A tutorial on reflection, with a particular emphasis on Java, with a comparison with C++, Python, and Smalltalk. It describes different scenarios in which reflection is useful, a brief history of reflection and MOPs, a comparison with C++, Python, and Smalltalk, and some particulars about Java. The source code of the examples in Java (Eclipse project), Smalltalk (Squeak image v3.10.6), Python (Eclipse project), and C++ (Eclipse projects and Visual Studio solution) are available. (C++ Eclipse projects require Mirror.) Big thanks to Matúš Chochlík and Marcus Denker for their kind and precious help with C++ and Smalltalk.
The tutorial focuses on four common problems:
- Avoid using instanceof when code must bypass the compiler and virtual machine’s choice of the method to call.
- Create external, user-defined pieces of code loaded, used, and unloaded at run-time.
- Translate data structures or object states into a format that can be stored (file, network...).
- Monitor the execution of a program to understand its behaviour, and measure its space and time complexity.
It shows working examples of Java, Smalltalk, Python, and C++ code solving the four common problems through four scenarios:
- Scenario 1: invoke an arbitrary method on an object (see the problems with instanceof and plugins).
- Scenario 2: access the complete (including private) state of an object (see the problem with serialisation).
- Scenario 3: count the number of instances of a class created at runtime (see the problem with debugging/profiling).
- Scenario 4: patch the method of a class to change its behaviour (see the problem with patching).
It also discusses the different kinds of interconnections among objects that are available in common programming languages (linking, forking, subclassing, inter-process communication, and dynamic loading/invoking), a bit of theory about reflection, and specifically the class-loading mechanism of Java.
REST APIs are nowadays the de-facto standard for Web applications. However, as more systems and services adopt the REST architectural style, many problems arise regularly. To avoid these repetitive problems, developers should follow good practices and avoid bad practices. Thus, research on good and bad practices and how to design a simple but effective REST API are essential. Yet, to the best of our knowledge, there are only a few concrete solutions to recurring REST API practices, like “API Versioning”. There are works on defining or detecting some practices, but not on solutions to the practices. We present the most up-to-date list of REST API practices and formalize them in the form of REST API (anti)patterns. We validate our design (anti)patterns with a survey and interviews of 55 developers.
Analyzing and Visualizing Projects and their Relations in Software Ecosystems presents an approach to help developers understand and navigate between projects in related software ecosystems. The approach generates word clouds from project documentation to summarize projects. It then maps relationships between word clouds to identify related projects. This allows developers to better understand the scope and connections between projects within software ecosystems.
This document presents an approach for automatically identifying antipatterns in microservice-based systems. It defines a meta-model with 13 components to capture necessary information about a system and its microservices. It also identifies 15 common microservice antipatterns. Detection rules are defined for each antipattern based on analyzing the system's source code, dependencies, configuration and other artifacts. The goal is to develop a tool based on this approach to help developers minimize antipatterns in microservice systems and improve their maintenance and evolution.
The document presents a preliminary study comparing several open-source IoT development frameworks: Eclipse Vorto, ThingML, Node-red, and OpenHab. The researchers designed the study to evaluate the frameworks' ability to support basic IoT application requirements. They implemented examples from three common IoT application categories using each framework and analyzed the results. Overall, Node-red required the least effort while the other frameworks had more limitations. Future work could study how the frameworks complement each other and implement more complex examples.
This document describes a dataset of software engineering problems in video game development extracted from over 200 postmortems published between 1997 and 2019. The dataset contains 1,035 problems across 20 problem types and is intended to summarize developers' experiences and difficulties during game development. It is available on GitHub at the listed URL.
This document summarizes research into software engineering patterns for designing machine learning systems. A survey found that ML developers have little knowledge of applicable architecture and design patterns. A literature review identified 19 scholarly papers and 19 gray documents discussing practices. The research aims to classify ML patterns according to the typical ML pipeline process and software development lifecycle. It identifies 12 architecture patterns, 13 design patterns, and 8 anti-patterns for ML systems. Future work includes documenting the patterns fully and analyzing their impact on ML system quality attributes.
This document describes a type-sensitive service identification approach called ServiceMiner to support the migration of legacy systems to service-oriented architectures. ServiceMiner uses static analysis and detection rules tailored to specific service types to identify services. It was validated on an open-source ERP system, Compiere, where it achieved higher identification accuracy than other approaches and reduced the effort required to identify architecturally significant services. The approach automates service identification, allows prioritizing types, and is extensible to new technologies.
1. Un cadre pour la traçabilité
des motifs de conception
Soutenance de thèse de doctorat
Yann-Gaël Guéhéneuc
École des Mines Object Technology
de Nantes, France International, Inc., Canada
2. Plan
n Contexte
– Identification des choix de conception
n Problèmes
– Obtention de l’architecture d’un programme
– Identification des choix de conception
n Contributions
n Évaluation, perspectives
2/80
3. Plan
n Contexte
– Identification des choix de conception
n Problèmes
– Obtention de l’architecture d’un programme
– Identification des choix de conception
n Contributions
n Évaluation, perspectives
3/80
4. Contexte (1/2)
n Maintenance des programmes à objets
– Rétro-conception
– Compréhension
– Traçabilité
– Modification
n Coûtshumains, temporels, financiers
prépondérants [Sharon96, Takang96, Pressman01]
4/80
5. Contexte (2/2)
n Absence des développeurs originels
– Roulement
n Absence de documentation
– Implémentation
– Architecture
– Choix de conception
5/80
6. Scénario (1/8)
n JHotDraw [Gamma98]
– Programme de
dessin vectoriel
– 14 578 lignes
de code Java
– Figures
• Carré, arrondi
• Cercle, ellipse
• Ligne, polygone
6/80
• Connexion, dessin à main levée
7. Scénario (1/8)
n JHotDraw [Gamma98]
– Programme de
dessin vectoriel
– 14 578 lignes
de code Java
– Figures
• Carré, arrondi
• Cercle, ellipse
• Ligne, polygone
6/80
• Connexion, dessin à main levée
8. Scénario (2/8)
n Ajoutde
fonctionnalité
– La forme triangle
– Manipulation
identique aux
autres formes
7/80
9. Scénario (2/8)
n Ajoutde
fonctionnalité
– La forme triangle
– Manipulation
identique aux
autres formes
7/80
10. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
11. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
12. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
13. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
14. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
15. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
16. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
17. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
18. Scénario (3/8)
n Implémentation
n Architecture
n Choix de conception
8/80
19. Scénario (4/8)
Frame Panel
n Implémentation
n Architecture
DrawingEditor DrawingView
n Choix de conception Tool Drawing
Handle Figure
AbstractFigure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
9/80
20. Scénario (5/8)
Frame Panel
n Implémentation
n Architecture
DrawingEditor DrawingView
n Choix de conception Tool Drawing
Handle Figure
AbstractFigure
Composer des objets en une hiérarchie
tout–partie qui permet au client de
manipuler uniformément des objets et AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
des compositions d'objets
10/80
21. Scénario (6/8)
Frame Panel
n Choix de conception
pour manipuler DrawingEditor DrawingView
uniformément des
Tool Drawing
objets
Handle Figure
AbstractFigure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
11/80
22. Scénario (6/8)
Frame Panel
n Choix de conception
pour manipuler DrawingEditor DrawingView
uniformément des
Tool Drawing
objets
Handle Figure
AbstractFigure
TriangleFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
11/80
23. Scénario (7/8)
n Modification
– Plus pertinente
– Plus rapide
12/80
24. Scénario (7/8)
n Modification
– Plus pertinente
– Plus rapide
12/80
25. Scénario (7/8)
n Modification
– Plus pertinente
– Plus rapide
12/80
26. Scénario (8/8)
n Choix de conception
– Facilitent la maintenance
• Rétro-conception
• Compréhension
• Traçabilité
• Modification
– Diminuent les coûts
13/80
27. Constat (1/2)
n Développement des programmes :
techniques et outils bien intégrés
– Implémentation
• Eclipse
– Architecture
• Rational Rose
– Choix de conception
• Patrons de conception [Gamma94]
14/80
28. Constat (2/2)
n Maintenance des programmes :
techniques et outils déconnectés
– Implémentation
– Architecture
– Choix de conception
15/80
29. Objectifs (1/2)
n Maintenance des programmes à objets
– Rétro-conception
– Compréhension
– Traçabilité
– Modification
n Assistance semi-automatique
– Obtention de l’architecture d’un programme
16/80
– Identification des choix de conception
30. Objectifs (2/2)
n Implémentation
n Architecture
Composer des objets en une hiérarchie
n Choix de conception tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
17/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
31. Objectifs (2/2)
n Implémentation
n Architecture
Composer des objets en une hiérarchie
n Choix de conception tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
17/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
32. Objectifs (2/2)
n Implémentation
n Architecture
Composer des objets en une hiérarchie
n Choix de conception tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
17/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
33. Objectifs (2/2)
n Implémentation
n Architecture
Composer des objets en une hiérarchie
n Choix de conception tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
17/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
34. Objectifs (2/2)
n Implémentation
n Architecture
Composer des objets en une hiérarchie
n Choix de conception tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
17/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
35. Contributions (1/4)
n Une suite d’outils intégrés, Ptidej
– Techniques
• Analyses statiques et dynamiques
• Programmation par contraintes avec explications
– Outils
• Introspector, Caffeine
• PtidejSolver, PtidejLibrary
18/80
36. Contributions (2/4)
n Implémentation
n Architecture
n Choix de conception
19/80
37. Contributions (3/4)
n Implémentation
n Architecture
n Choix de conception
20/80
38. Contributions (4/4)
n Implémentation
n Architecture
n Choix de conception
21/80
39. Plan
n Contexte
– Identification des choix de conception
n Problèmes
– Obtention de l’architecture d’un programme
– Identification des choix de conception
n Contributions
n Évaluation, perspectives
22/80
40. Architecture d’un programme
Frame Panel
n UML [OMG03]
• Classe DrawingEditor DrawingView
• Interface
• Héritage Tool Drawing
• Instanciation
• Association Handle Figure
• Agrégation
AbstractFigure
• Composition
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
23/80
41. État de l’art (1/2)
n Programmation logique floue [Niere01]
– Variantes d’implémentation
n Analyses statiques
– Académiques [Korn99, Jackson99]
• Efficacité spatiale et temporelle
– Industrielles [ArgoUML, Rational]
• Intégration aux outils de développement
24/80
42. État de l’art (2/2)
n Classe, interface, héritage, instanciation
– Définitions UML « précises »
n Association, agrégation, composition
– Définitions UML « ambiguës »
– Littérature : au moins 25 définitions
• Peu de définitions constructives
• Définitions constructives incomplètes
25/80
43. Objectifs
n Définitions
consensuelles et
constructives
– Association, agrégation, composition
n Algorithmes d’analyses
– Statiques
– Dynamiques
26/80
44. Définitions
n A B
Association
– Indique que les instances de A envoient
des messages aux instances de B
n A B
Agrégation
– Association définissant un tout (A) et une
partie (B) (champ appartenant au tout)
n A B
Composition
– Agrégation dans laquelle la partie (B)
27/80 appartient exclusivement au tout (A)
45. Propriétés (1/2)
n Multiplicité : MU
– Nombre d’instances min. et max.
A B A B A B
n Site d’invocation : SI
– Site d’invocation des envois de message
A B A B
28/80
46. Propriétés (2/2)
n Durée de vie : DV
– Dépendance entre les durées de vie des
instances de la partie et du tout
A B
n Exclusivité : EX
– Exclusivité des instances de la partie au tout
A B
29/80
47. Redéfinitions
n Association
– DV =? ∧ EX = indifférent ∧ MU = [0, +∞] ∧
SI ∈ {variable, paramètre, champ, …}
n Agrégation
– DV =? ∧ EX = indifférent ∧ MU = [1, +∞] ∧
SI ∈ {champ, …}
n Composition
– DV = + ∧ EX = vrai ∧ MU = [1, +∞] ∧ SI ∈
30/80 {champ, …}
48. Techniques, outils
n Analyses statiques : Introspector
– Multiplicité, MU
– Site d’invocation, SI
n Analyses dynamiques : Caffeine
– Durée de vie, DV
– Exclusivité, EX
31/80
49. Architecture (1/2)
n Introspector
– Classes, interfaces
– Héritage, instanciation
– Association, agrégation
n Caffeine
– Composition
32/80
53. Plan
n Contexte
– Identification des choix de conception
n Problèmes
– Obtention de l’architecture d’un programme
– Identification des choix de conception
n Contributions
n Évaluation, perspectives
34/80
54. Choix de conception
n Découverte des choix de conception
– Vaste problème [Shull96]
– Méthodologie spécifique à l’I.A. [Tonella99]
n Catalogue de choix de conception
35/80
55. Patrons de conception
n Erich
Gamma et al. ; Patrons de
conception ; Addison-Wesley, 1994 [Gamma94]
n Ensemble [Alexander77]
– Nom
– Problème
– Solution
– Compromis
36/80
56. Patrons de conception
n Erich
Gamma et al. ; Patrons de
conception ; Addison-Wesley, 1994 [Gamma94]
n Ensemble [Alexander77]
– Nom
– Problème
– Solution
– Compromis
36/80
57. Patrons de conception
n Erich
Gamma et al. ; Patrons de
conception ; Addison-Wesley, 1994 [Gamma94]
n Ensemble [Alexander77]
– Nom
– Problème
– Solution
– Compromis
36/80
58. Le patron de conception
Composite – problème
n Composer des objets en une structure
d’arbre pour représenter des hiérarchies
tout–partie
n Permettreau client de manipuler
uniformément des objets et des
compositions d’objets
37/80
59. Le patron de conception
Composite – solution
n Solutiond’un patron de conception
= motif de conception qui décrit des
micro-architectures récurrentes
Ramification
1..n
Client
opération()
ramifications
Feuille Branche
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier)
Pour chaque ramifications
38/80 opération()
ramification.opération()
60. Le patron de conception
Composite – exemple
n Micro-architecture similaire au motif
Frame Panel
DrawingEditor DrawingView
Tool Drawing
Handle Figure
AbstractFigure
39/80
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
61. Le patron de conception
Composite – exemple
n Micro-architecture similaire au motif
Frame Panel Frame Panel
DrawingEditor DrawingView
DrawingEditor DrawingView
Tool Drawing
Tool Drawing
Handle Figure
AbstractFigure
Handle Figure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
Figure
AbstractFigure
39/80
AttributeFigure
AttributeFigure DecoratorFigure PolyLineFigure PolyLineFigure
DecoratorFigure CompositeFigure CompositeFigure
62. Le patron de conception
Composite – exemple
n Micro-architecture similaire au motif
Frame Panel Frame Panel
Ramification
1..n
Client
DrawingEditor DrawingView
opération()
DrawingEditor DrawingView
ramifications
Tool Drawing
Feuille Branche
Tool Drawing
Handle Figure
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaque ramifications
opération() ramification.opération()
AbstractFigure
Handle Figure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
Figure
AbstractFigure
39/80
AttributeFigure
AttributeFigure DecoratorFigure PolyLineFigure PolyLineFigure
DecoratorFigure CompositeFigure CompositeFigure
63. Frame Panel
Problème DrawingEditor
Tool
DrawingView
Drawing
Handle Figure
Comment identifier AbstractFigure
dans l’architecture AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
d’un programme des Figure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
micro-architectures
similaires à des Client
Ramification
opération ()
1..n
ramifications
motifs de conception Feuille
opération ()
Branche
ajouter (Partie)
enlever (Partie)
obtenirPartie (entier )
Pour chaque ramifications
opération()
pour expliquer les
ramification.opération ()
Composer des objets en une hiérarchie
40/80 choix de conception ? tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
64. Frame Panel
Problème DrawingEditor
Tool
DrawingView
Drawing
Handle Figure
Comment identifier AbstractFigure
dans l’architecture AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
d’un programme des Figure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
micro-architectures
similaires à des Client
Ramification
opération ()
1..n
ramifications
motifs de conception Feuille
opération ()
Branche
ajouter (Partie)
enlever (Partie)
obtenirPartie (entier )
Pour chaque ramifications
opération()
pour expliquer les
ramification.opération ()
Composer des objets en une hiérarchie
40/80 choix de conception ? tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
65. Frame Panel
Problème DrawingEditor
Tool
DrawingView
Drawing
Handle Figure
Comment identifier AbstractFigure
dans l’architecture AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
d’un programme des Figure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
micro-architectures
similaires à des Client
Ramification
opération ()
1..n
ramifications
motifs de conception Feuille
opération ()
Branche
ajouter (Partie)
enlever (Partie)
obtenirPartie (entier )
Pour chaque ramifications
opération()
pour expliquer les
ramification.opération ()
Composer des objets en une hiérarchie
40/80 choix de conception ? tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
66. Frame Panel
Problème DrawingEditor
Tool
DrawingView
Drawing
Handle Figure
Comment identifier AbstractFigure
dans l’architecture AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
d’un programme des Figure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
micro-architectures
similaires à des Client
Ramification
opération ()
1..n
ramifications
motifs de conception Feuille
opération ()
Branche
ajouter (Partie)
enlever (Partie)
obtenirPartie (entier )
Pour chaque ramifications
opération()
pour expliquer les
ramification.opération ()
Composer des objets en une hiérarchie
40/80 choix de conception ? tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
67. État de l’art (1/2)
n Programmation logique [Wuyts98]
– Simplicité de mise en œuvre
– Intégration à Visual Works
n Programmation par contraintes [Rich90, Quilici97]
– Représentation des motifs
– Passage à l’échelle
n Analyses syntaxiques [Alencar95, Brown96, Hedin97, Albin03]
– Efficacité spatiale et temporelle
41/80
68. État de l’art (2/2)
n Identification des micro-architectures
– Exactes
– Similaires
n Interactions avec les mainteneurs
42/80
69. Objectifs
n Représentation des motifs
n Pas de descriptions a priori des
similarités recherchées
– Rigoureuse → catalogue
– Lointaine → justifications
n Interaction avecle mainteneur
n Passage à l’échelle
n Solution uniforme
43/80
70. Proposition
n Programmation par contraintes [Tsang93]
– Représentation des motifs
– Passage à l’échelle
– Solution uniforme
avec explications [Jussien01]
– Pas de description a priori des similarités
– Identification guidée par le mainteneur
44/80
71. Problème de satisfaction de
contraintes (PSC) (1/6)
[Montanari74]
n Ensemble 〈V, C, D〉
– Variables V = {v1, …, vn}
– Contraintes C = {C1, …, Ce}
– Domaines des variables D = {D1, …, Dn}
n Solution
– Résolution par propagation des contraintes
45/80
72. PSC (2/6)
n PSC déduit de
– Modèle du motif de conception
• Participants → variables
• Relations entre participants → contraintes
– Modèle de l’architecture du programme
• Classes du programme → domaine
• Relations entre les classes du programme →
sémantique effective des contraintes
46/80
73. Ramification
1..n
Client
opération()
PSC (3/6) Feuille Branche
ramifications
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaque ramifications
opération() ramification.opération()
n Motif de conception Composite
– Trois participants → trois variables
• ramification
• feuille
• branche
47/80
74. Ramification
1..n
Client
opération()
PSC (4/6) Feuille Branche
ramifications
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaque ramifications
opération() ramification.opération()
n Motif de conception Composite
– Relations entre participants → contraintes
• branche < ramification
• feuille < ramification
• branche u ramification
• Différences deux-à-deux
48/80
75. Ramification
1..n
Client
opération()
PSC (4/6) Feuille Branche
ramifications
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaque ramifications
opération() ramification.opération()
n Motif de conception Composite
– Relations entre participants → contraintes
• branche < ramification
• feuille < ramification
• branche u ramification
• Différences deux-à-deux
48/80
76. Frame Panel
DrawingEditor DrawingView
PSC (5/6) Tool Drawing
Handle Figure
AbstractFigure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
n Architecture du programme JHotDraw
– Classes du programme → domaine
• DrawingEditor
• DrawingView
Relations entre les
• Tool +
classes, attributs
• Drawing
•…
49/80
77. Frame Panel
DrawingEditor DrawingView
PSC (5/6) Tool Drawing
Handle Figure
AbstractFigure
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
n Architecture du programme JHotDraw
– Classes du programme → domaine
• DrawingEditor
• DrawingView
Relations entre les
• Tool +
classes, attributs
• Drawing
•…
49/80
78. PSC (6/6)
n Identificationdes micro-architectures
similaires au motif de conception
Composite
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
D = {〈DrawingEditor, Drawing…〉}
50/80
90. Solution (4/4)
n Explication de contradiction
– branche < ramification
– feuille < ramification
– branche u ramification
n Pas de solution avec ces contraintes
54/80
91. Programmation par contraintes
avec explications (PPCE) (1/3) [Jussien01]
n Programmation par contraintes
– Opérations de retraits ou de restauration
de valeurs des domaines
n Explications
– Sous-ensemble des opérations qui mène à
une solution ou à une contradiction
– Dynamicité de la résolution
55/80
92. PPCE (2/3)
n Solution
∃ opérations de retraits et de restauration
des valeur des domaines toutes les
contraintes soient satisfaites
n Contradiction
– Sous-ensemble des opérations qui mène à
une contradiction
56/80 – Ensemble des explications
93. PPCE (3/3)
n Relaxation du problème
n Relaxation des contraintes
57/80
94. Relaxation du problème [Petit02] (1/2)
n Retirer
la contrainte entraînant une
contradiction
– branche u ramification
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
D = {〈DrawingEditor, Drawing…〉}
58/80
95. Relaxation du problème [Petit02] (1/2)
n Retirer
la contrainte entraînant une
contradiction
– branche u ramification
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
D = {〈DrawingEditor, Drawing…〉}
58/80
96. Relaxation du Frame Panel
problème (2/2) DrawingEditor DrawingView
Tool Drawing
Ramification
1..n
Client
opération ()
ramifications
Handle Figure
Feuille Branche
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaqueramifications AbstractFigure
opération()
ramification.opération()
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
59/80 D = {〈DrawingEditor, Drawing…〉}
97. Relaxation du Frame Panel
problème (2/2) DrawingEditor DrawingView
Tool Drawing
Ramification
1..n
Client
opération ()
ramifications
Handle Figure
Feuille Branche
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaqueramifications AbstractFigure
opération()
ramification.opération()
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
59/80 D = {〈DrawingEditor, Drawing…〉}
98. Relaxation du Frame Panel
problème (2/2) DrawingEditor DrawingView
Tool Drawing
Ramification
1..n
Client
opération ()
ramifications
Handle Figure
Feuille Branche
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaqueramifications AbstractFigure
opération()
ramification.opération()
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
59/80 D = {〈DrawingEditor, Drawing…〉}
99. Relaxation des contraintes (1/3)
n Remplacerune contrainte par un autre
sémantiquement moins forte
– branche u ramification
– branche w ramification
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
60/80 D = {〈DrawingEditor, Drawing…〉}
100. Relaxation des contraintes (1/3)
n Remplacerune contrainte par un autre
sémantiquement moins forte
– branche u ramification Composition
– branche w ramification
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
60/80 D = {〈DrawingEditor, Drawing…〉}
101. Relaxation des contraintes (1/3)
n Remplacerune contrainte par un autre
sémantiquement moins forte
– branche u ramification Composition
– branche w ramification Agrégation
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
60/80 D = {〈DrawingEditor, Drawing…〉}
102. Relaxation des contraintes (1/3)
n Remplacerune contrainte par un autre
sémantiquement moins forte
– branche u ramification Composition
– branche w ramification Agrégation
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
w
60/80 D = {〈DrawingEditor, Drawing…〉}
103. Relaxation des contraintes (2/3)
n Remplacerune contrainte par un autre
sémantiquement différente
– branche < ramification
– branche < ramification
<
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
61/80 D = {〈DrawingEditor, Drawing…〉}
104. Relaxation des contraintes (2/3)
n Remplacerune contrainte par un autre
sémantiquement différente
– branche < ramification Héritage direct
– branche < ramification
<
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
61/80 D = {〈DrawingEditor, Drawing…〉}
105. Relaxation des contraintes (2/3)
n Remplacerune contrainte par un autre
sémantiquement différente
– branche < ramification Héritage direct
– branche < ramification
< Héritage indirect
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
61/80 D = {〈DrawingEditor, Drawing…〉}
106. Relaxation des contraintes (2/3)
n Remplacerune contrainte par un autre
sémantiquement différente
– branche < ramification Héritage direct
– branche < ramification
< Héritage indirect
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
< <
ramification, branche u ramification}
61/80 D = {〈DrawingEditor, Drawing…〉}
107. Relaxation des Frame Panel
contraintes (3/3) DrawingEditor DrawingView
Tool Drawing
Ramification
1..n
Client
opération ()
ramifications
Handle Figure
Feuille Branche
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaqueramifications AbstractFigure
opération()
ramification.opération()
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
ramification, branche u ramification}
62/80 D = {〈DrawingEditor, Drawing…〉}
108. Relaxation des Frame Panel
contraintes (3/3) DrawingEditor DrawingView
Tool Drawing
Ramification
1..n
Client
opération ()
ramifications
Handle Figure
Feuille Branche
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaqueramifications AbstractFigure
opération()
ramification.opération()
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
< <
ramification, branche u ramification}
w
62/80 D = {〈DrawingEditor, Drawing…〉}
109. Relaxation des Frame Panel
contraintes (3/3) DrawingEditor DrawingView
Tool Drawing
Ramification
1..n
Client
opération ()
ramifications
Handle Figure
Feuille Branche
opération() ajouter(Partie)
enlever(Partie)
obtenirPartie(entier) Pour chaqueramifications AbstractFigure
opération()
ramification.opération()
AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
V = {ramification, branche, feuille}
C = {branche < ramification, feuille <
< <
ramification, branche u ramification}
w
62/80 D = {〈DrawingEditor, Drawing…〉}
110. Technique, outils
n Solveur de contraintes : PtidejSolver
– Interactif
– Automatique (ê complexité)
!
n Bibliothèque de contraintes :
PtidejLibrary
– Héritage direct, indirect
– Association, agrégation, composition
63/80
– Utilisation, …
111. Choix de conception (1/2)
n PtidejSolver, PtidejLibrary
– Identification des micro-architectures
similaires à un motif de conception
– Justifications des micro-architectures
identifiées
– Interaction avec les mainteneurs
64/80
113. Choix de conception (2/2)
Programmation par
contraintes avec
explications
65/80
114. Choix de conception (2/2)
Composer des objets en une hiérarchie
Frame Panel tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
DrawingEditor DrawingView
Tool Drawing
Handle Figure
Programmation par AbstractFigure
contraintes avec
explications
65/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
115. Plan
n Contexte
– Identification des choix de conception
n Problèmes
– Obtention de l’architecture d’un programme
– Identification des choix de conception
n Contributions
n Évaluation, perspectives
66/80
116. Un cadre pour la traçabilité des
motifs de conception (1/4)
n Métamodélisation
– PADL
n Analyse de programme
– Introspector, Caffeine
n Programmation par contraintes
– PtidejSolver, PtidejLibrary
n Visualisation
– PtidejUI
67/80
117. Un cadre pour la traçabilité des
motifs de conception (2/4)
n Ptidej (Pattern Trace Identification, Detection, and Enhancement in Java) Utilise
Produit
PADL
Architecture Motifs de conception PtidejUI
Introspector PtidejSolver
Caffeine PtidejLibrary
68/80 Code source Java Micro-architectures identifiées
118. Un cadre pour la traçabilité des
motifs de conception (2/4)
n Ptidej (Pattern Trace Identification, Detection, and Enhancement in Java) Utilise
Produit
PADL
Architecture Motifs de conception PtidejUI
Introspector PtidejSolver
Caffeine PtidejLibrary
68/80 Code source Java Micro-architectures identifiées
119. Un cadre pour la traçabilité des
motifs de conception (3/4)
n Ptidej, ~700 heures de développement
– Java
• 20 projets, 132 paquetages, 669 classes,
72 interfaces, 79 330 lignes
– Claire
• 41 fichiers, 45 classes, 235 méthodes, 7 835
lignes
– Prolog
• 6 fichiers, 76 prédicats, 524 lignes
69/80
120. Un cadre pour la traçabilité des
motifs de conception (4/4)
Composer des objets en une hiérarchie
tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
70/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
121. Un cadre pour la traçabilité des
motifs de conception (4/4)
Définitions
Introspector
Composer des objets en une hiérarchie
Caffeine tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
70/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
122. Un cadre pour la traçabilité des
motifs de conception (4/4)
PtidejSolver
Définitions
PtidejLibrary
Introspector
PtidejUI
Caffeine Composer des objets en une hiérarchie
tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
70/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure
123. Un cadre pour la traçabilité des
motifs de conception (4/4)
PtidejSolver
Définitions
PtidejLibrary
Eclipse
Introspector
PtidejUI
Caffeine Composer des objets en une hiérarchie
tout–partie qui permet au client de
manipuler uniformément des objets et
des compositions d'objets
Frame Panel Frame Panel
DrawingEditor DrawingView DrawingEditor DrawingView
Tool Drawing Tool Drawing
Handle Figure Handle Figure
AbstractFigure AbstractFigure
70/80 AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure AttributeFigure DecoratorFigure PolyLineFigure CompositeFigure