Loading s5obj_lang_labo_5...

enib_small.png S5-OBJ_Lang Labo_5 — Collaborations : association

Vers une bibliothèque de filtres plus riche

Dans le laboratoire précédent, nous avons construit un processeur d'images capable d'appliquer une suite de filtres dans l'ordre choisi par l'utilisateur.
Nous allons maintenant enrichir progressivement notre bibliothèque de traitement d'images en ajoutant de nouveaux filtres.
Ces traitements pourront ensuite être combinés pour construire des pipelines produisant différents effets visuels.

Nous profiterons également de ce laboratoire pour faire évoluer l'architecture de notre application.
Jusqu'à présent, les objets collaboraient principalement à travers des relations de composition et de dépendance.
Nous introduirons une nouvelle relation : l'association, qui permet à plusieurs objets de partager une même ressource tout en conservant des cycles de vie indépendants.

L'objectif de ce laboratoire est donc triple :

À la fin du laboratoire, nous disposerons d'un ensemble de traitements suffisamment riche pour construire des pipelines variés, produire différents rendus artistiques et conserver une trace des traitements réalisés.
{1 #pipe-line } Construire des pipelines artistiques
{2 #vieillir } Vieillir une photo
{3} Conserver l'historique des traitements : Association
{4} Comparaison avec Rust

Code C# obtenu à l'issue de ce laboratoire.
Program.cs
ImageProcessor.cs
Logger.cs
Filtres.cs

À retenir.
Polymorphisme et interfaces
Le polymorphisme permet de manipuler différents objets à travers une même abstraction.
Dans notre application, tous les filtres sont manipulés à travers l'interface IImageFilter.

Une interface peut évoluer au cours du développement.
Lorsqu'un nouveau comportement commun apparaît, il peut être ajouté à l'interface puis implémenté par toutes les classes concernées.

Association
Une association représente une collaboration entre objets indépendants.
Les objets associés :

Conception orientée objet
Le choix d'une relation UML dépend du rôle joué par les objets dans l'application :

Ces relations permettent de répartir clairement les responsabilités entre les objets et de rendre l'application plus facile à faire évoluer.

Comparaison avec les autres langages
Les concepts objets restent identiques, mais Rust demande d'expliciter les relations entre les objets dans les types.
Les mécanismes d'emprunt, de partage et de durée de vie permettent à Rust de garantir, autant que possible dès la compilation, la validité des références entre les objets.