feat: add software architecture principes
This commit is contained in:
parent
8356f031a6
commit
51a9d99d78
1 changed files with 84 additions and 0 deletions
84
content/projet_programmation/8_principes/index.md
Normal file
84
content/projet_programmation/8_principes/index.md
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
---
|
||||||
|
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).
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue