Génie Logiciel Conception Principes de Paquetage Packaging et Marketing
La conception Définition Générale : Activité créatrice qui consiste à élaborer un projet, ou une partie des éléments le constituant, en partant des besoins exprimés, des moyens existants et des possibilités technologiques dans le but de créer un produit ou un service.
Conception fonctionnelle Première étape de la conception d'un système, qui consiste à définir les fonctions des composantes d'un système et leurs relations fonctionnelles.
4 Conception ascendante Principe de conception d'un programme informatique par lequel on définit d'abord les fonctions élémentaires pour ensuite les utiliser pour définir des fonctions de plus en plus spécifiques. Rappel les PID sont toujours positifs.
5 Conception descendante Méthode de conception de programme dans laquelle la construction du programme se fait en décomposant le problème global en sous-problèmes, eux-mêmes décomposés en actions plus élémentaires jusqu'à atteindre le niveau choisi pour la description du problème dans un langage donné.
6 La conception de système La conception de système inclut la définition de l'architecture des matériels et des logiciels, ainsi que celle des composants, des modules, des interfaces et des données. En informatique, l'analyse de système est étroitement liée à la conception de système. En fait, à la différence de l'analyse de système où l'on met l'accent sur la décomposition du problème, on s'emploie, dans la conception de système, à trouver les solutions.
7 Ouais bon d'accord Une définition de la conception ne nous donne pas beaucoup d'idée sur comment en faire une... Essentiellement c'est traduire des exigences en une solution. Analyse = comprendre les exigences Concevoir = construire une solution
8 Deux AXES majeurs! > LE CLIENT > LE MAINTENEUR
9 Les Risques Rigidité Fragilité immobilité
10 Mais! On code en Objet On utilise des interfaces On fait une conception avec les DP On utilise UML Alors?
11 Alors c'est les paquetages La gestion des dépendances doit être faite avec rigueur et trois cibles : Robustesse Extensibilité Réutilisabilité
Les paquetages Les paquetages offrent les mêmes challenges que les classes: Lisibilité Réutilisabilité Ouverture/fermeture De plus il forment une unité de programmation beaucoup plus efficace pour l'organisation du travail et pour définir l'architecture logiciel
13 Dépendance! Si absent => dysfonctionnement Si différent => dysfonctionnement Si modifié => Re-compilation? => Continuité Syntaxique? => Continuité Sémantique?
14 Règles de Packaging :) Principe d'ouverture fermeture Livraison <=> Réutilisation Fermeture commune Dépendances acycliques Dépendance et Stabilité Stabilité et Abstraction
15 Principe d'ouverture fermeture Le principe d'ouvert / Fermé que l'on connaît bien sur les Objets avec la création d'interfaces et de Classes d'implémentation, s'applique aussi sur les paquetages. Stratégie : Réduire le nombre de classe et d'interface publiques Privilégier des interfaces au classes Utiliser le Polymorphisme Simplifier et concentrer le rôle du paquetage
Exercice 16 Dans les Design pattern quels sont ceux qui sont une application de ce principe d'ouverture fermeture. Ouvert au extentions Fermé au Modifications
17 Dépendance et Stabilité On doit dépendre de choses plus stable. Plus de client impose plus de stabilité
18 Mesurer la stabilité Inverse du risque de changement Plus le module dépend d'autres modules moins il est stable Plus un module est abstrait plus il est facile de le garder stable Hauteur dans le graphe de dépendance
19 Valeur de la stabilité Plus un module est fermé donc stable plus il a de valeur pour les développeurs. Plus les module stables (bcp de clients) sont effectivement stables plus l'application dans son ensemble est stable Identifier et concevoir les paquetage stables est une tâche importante. Penser que vous pouvez agrandir votre paquetage avec de nouvelles interfaces sans trop de danger
Exercice 20 Proposez un paquetage «stable» pour un des logiciel suivants : -logiciel de gestion de bibliothèque -logiciel de gestion de tâches -logiciel de gestion de comptes bancaire -logiciel «Astéroides» -logiciel de labyrinthe Expliquer pourquoi votre paquetage est stable. Critiquer la taille et la cohésion de votre paquetage Avez vous définie une classes ou que des interfaces
21 Livraison <=> Réutilisation Si c'est livré c'est (ré)utilisable! La granularité pour la réutilisation est le paquetage pas la classe! Seul les paquetages livrés sont potentiellement réutilisables
22 Réutilisation Le code reste la propriété de l'auteur (pas de bidouilles dans le paquetage d'un autre), c'est aussi lui qui corrige les bugs. Je veux pas le savoir, i.e. Pourvu que cela marche je cherche pas a savoir pourquoi, (sauf devant la machine a café quand on a épuisé les thèmes filles/mecs, cinéma, friends etc) Livraison = Publication = mise en forme
23 Fermeture commune Les classes qui dépendent d'un même concept doivent être placé dans le même paquetage Si le concept change toutes les classes concernées sont dans cet unique paquetage. L'unité de fermeture est le paquetage, la modification d'un concept force la réouverture, il est important que le nombre de paquetage réouverts soit minimal. Le rôle de l'analyse qui est d'identifier les concepts importants d'un logiciel est souligné ici.
24 Dépendances acycliques Un module doit toujours dépendre de modules plus stables que lui. Si cette règle est respecté alors le graphe de dépendance est acyclique En cas de cycle vous devez faire un refactoring pour éliminer ce cycle
25 Stabilité et Abstraction Pour fabriquer un paquetage stable il faut travailler a identifier de bonnes abstractions Ne rien sous entendre sur l'implémentation Plus c'est abstrait plus c'est stable
26 Exemples package fr.umlv.dr.assertions; public class Assertions { } public static void racinecarre(int int x) { assert (x > 0) ; System.out.println(java.lang.Math.sqrt((double double)x)); } public static void main(string[] args) { } racinecarre(100); racinecarre(-67);
27 Livraisons Définition d'une livraison MAVEN!! Définition des 3 chiffres dans un numéro de version Définition du terme configuration