Si nous devons faire abstraction de langages, de cadres et de leurs propres interprétations particuliers, la hiérarchie de granularité logicielle abstraite est la suivante:
Product - application, library, service
Module - GUI, core logic, data, etc...
Component - purpose specific collection of objects
Object - collection of primitives
Primitive - numbers, functions, etc...
Clair et simple, le produit est une collection fonctionnelle de modules fonctionnels connectés.
Comme son nom l'indique, la motivation d'un module est la modularité. Contrairement à ce que beaucoup prétendent, cela n'implique pas vraiment la réutilisation du code. Il existe de nombreux modules qui ne sont pas vraiment réutilisables et ne correspondent à rien pour lequel ils n'ont pas été conçus.
Il est important de séparer les différentes couches logicielles, ce qui rend le logiciel beaucoup plus facile à implémenter et à maintenir, et si la nécessité de réimplémenter quelque chose comme un frontal à un cadre graphique différent, la modularité permet que cela se produise de manière simple et sûre, sans rupture code partout.
Un module encapsule une collection de composants qui servent tous un objectif commun tel que défini par les exigences du module. Un module doit être autonome et complet, et bien qu'il ne soit pas vraiment utilisable en soi, il devrait pouvoir fonctionner en conjonction avec n'importe quelle implémentation conforme.
En termes de granularité, le composant se situe entre le module et l'objet. Le but d'un composant est de rassembler une collection d'objets à usage général pour former une unité spécifique à un but.
Comme son nom l'indique, contrairement au Module, le Composant n'est pas "autonome", il fait partie d'un ensemble fonctionnel plus large.
Les objets sont les plus petits blocs de construction des composants. Les objets sont des collections de primitives et les couplent ensemble pour servir un niveau inférieur, plus universel tout en restant quelque peu spécifique.
Les primitives sont le plus petit, le plus simple et le plus bas niveau de granularité de développement logiciel. Il s'agit essentiellement de nombres entiers et réels et de fonctions / opérateurs, bien que la plupart des langues aient leurs propres "citoyens de première classe" supplémentaires.
Il y a très peu de choses que vous puissiez faire avec les primitives, et en même temps, c'est à un niveau si bas que vous pouvez pratiquement tout faire avec. C'est juste très, très verbeux, incroyablement compliqué et incroyablement fastidieux à accomplir tout en travaillant directement avec des primitives.
- Quel est l'intérêt de tout cela?
Comme déjà mentionné ci-dessus, travailler directement avec des primitives est une très mauvaise idée. Non seulement parce qu'il est incroyablement complexe, lent et fastidieux à faire pour le développement de logiciels modernes, mais il est également extrêmement gênant et gênant pour les tests et la maintenance.
L'intégration de toutes ces parties conceptuelles dans le développement logiciel le rend plus facile, plus rapide, plus simple et plus sûr. Vous ne faites pas une maison d'atomes, quelle que soit la polyvalence et l'universalité des atomes. Ce serait un exercice futile. Vos atomes sont vos primitifs, l'argile est votre objet, les briques sont vos composants, les murs, le sol et le toit sont vos modules, assemblés ensemble ils manifestent le produit final.
Les humains n'inventent vraiment rien, nous découvrons seulement des choses qui existent déjà dans l'univers, puis les copions et les appliquons à nos vies. La même hiérarchie de granularité est intrinsèque à l'univers lui-même, des atomes et même en dessous, aux molécules organiques, protéines, tissus, organes, organismes et au-dessus, la réalité elle-même obéit au même principe - combinant des choses abstraites petites, simples, à fonctions limitées et à des fins abstraites en des choses plus grandes, plus complexes, plus fonctionnelles et des choses plus spécifiques.
- Mises en garde terminologiques
Techniquement, ce sont tous des "objets", ce sont tous des "composants" du développement logiciel, ils sont tous suffisamment "modulaires" pour pouvoir s'emboîter, ce sont tous des "produits" au sens où ils ont été produits et ainsi de suite. ..
Il ne s'agit pas de terminologie ou de nomenclature, mais de la façon dont le passage à l'échelle supérieure et extérieure affecte divers aspects de la créativité et de la productivité. Et sur l'importance d'utiliser non seulement tous ces différents niveaux, mais aussi l'importance de ne pas essayer d'atteindre un objectif au mauvais niveau, ce qui ne peut être que contre-productif.