diff --git a/content/projet_programmation/7_architecture_logicielle/imgs/dependence_c1_c2.svg b/content/projet_programmation/7_architecture_logicielle/imgs/dependence_c1_c2.svg deleted file mode 100644 index c6ffaca..0000000 --- a/content/projet_programmation/7_architecture_logicielle/imgs/dependence_c1_c2.svg +++ /dev/null @@ -1 +0,0 @@ -
C2
C1
\ No newline at end of file diff --git a/content/projet_programmation/7_architecture_logicielle/imgs/interface.svg b/content/projet_programmation/7_architecture_logicielle/imgs/interface.svg deleted file mode 100644 index a4326b6..0000000 --- a/content/projet_programmation/7_architecture_logicielle/imgs/interface.svg +++ /dev/null @@ -1 +0,0 @@ -
«interface»
IC1
C1
C2
\ No newline at end of file diff --git a/content/projet_programmation/8_principes/index.md b/content/projet_programmation/8_principes/index.md deleted file mode 100644 index 687a87a..0000000 --- a/content/projet_programmation/8_principes/index.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "PdP: Les principes" -date: 2024-03-21 -tags: ["besoins", "UML", "developpement logiciel"] -categories: ["Projet de programmation", "Cours"] ---- - -Pour rappel, une architecture logicielle est une structure qui permet de -maîtriser la taille et la complexité du logiciel tout en facilitant son -évolution. Nous sommes toujours dans l'optique de **décomposer pour maîtriser -et transformer**. - -Nous devons toujours: - - * favoriser la définition de dépendances avec une taille minimale; - * limiter les dépendances qui diffusent des changements (dépendances à - diffusion minimisé); - * favoriser la construction de niveau de granularité homogènes donnant lieur à - des graphes de dépendances distincts (niveau homogène de granularité); - * faire en sorte que dans sas suite de granularité, chacun des graphes de - dépendances correspondant soit plus simple que le précédent (simplification - entre niveaux consécutifs) - * favoriser la cohésion la plus forte et le couplage le plus faible (min-max); - * la validité des dépendances entre composants peut se contrôler en les - exprimant en langue naturelle de façon logique et intelligible (s'ennoncer - clairement). - -## Principe de simplicité - -Il faut favoriser la simplicité **dans tous ses aspects** et ainsi éviter toute -complexité. L;appellation la plus connue est *KISS* pour *Keep It Stupidly. -Simple*. - -Ce principe implique : - - * pas de construction qui ne couvre pas un besoin identifié; - * pas d'implémentation d'un besoin non fonctionnel non justifié; - * pas de généralité ou de généricité sans nécessité. - - Le principe de Peter en logiciel : tenter d'améliorer, de généraliser un - programme au delà des limites ses connaissances tel qu'il devienne - incompréhensible. Celui-ci va à l'encontre du principe *KISS*, il va dans le - même sens de l'effet de *Dunning-Krueger* : la situation où une personne - surestime sa compétence, mais aussi est trop incompétente pour comprendre sa - propre incompétence. - -## Principe de non duplication - -Il faut éviter d'inclure de la duplication non seulement de code mais aussi de -données, de représentation, de sous-structures de composants, de documentation -etc. Ces duplications sont difficilement maintenables et allongent inutilement le -code. - -Ces duplications peuvent avoir plusieurs sources: - - * négligence des développeurs qui peuvent dupliquer par facilité et/ou - rapidité; - * développeurs qui dupliquent du codes chacun de son côté sans s'en rendre - compte; - * les circonstances imposent une duplication de code (standards, formats ...); - * par inadvertance, lorsque les développeurs n'ont pas conscience de dupliquer. - -Dans le dernier cas, c'est sûrement que les dépendances entre les éléments n'ont -pas été identifié. - -Ces duplications doivent être factorisées, on les remplacent alors pas des -définitions, des fonctions/procédures, des mécanismes de généricité. - -### Cloisonnement et masquage - -Dans une architecture logicielle, les composants ne doivent laisser qu'un -minimum de leurs éléments visibles ou public tout en préservant le -fonctionnement général. - - * Règles implicites du *public*/*privé*. - * Directives explicites *public*/*privé* sur les composants (`extern`, `public` - `private`, `static`, ...) - * Utilisation d'interface. - -Ce principe est parfois difficile à appliquer notamment quant au choix de la -localisation des éléments (coucou principe de simplification min-max). - - -