Wenn wir von bestimmten Sprachen, Frameworks und deren eigenen Interpretationen abstrahieren wollen, lautet die abstrakte Software-Granularitätshierarchie wie folgt:
Product - application, library, service
Module - GUI, core logic, data, etc...
Component - purpose specific collection of objects
Object - collection of primitives
Primitive - numbers, functions, etc...
Einfach und übersichtlich ist das Produkt eine funktionierende Sammlung verbundener Funktionsmodule.
Wie der Name schon sagt, ist die Motivation eines Moduls Modularität. Entgegen vieler Behauptungen impliziert dies nicht wirklich die Wiederverwendung von Code. Es gibt viele Module, die nicht wirklich wiederverwendbar sind und zu nichts passen, wofür sie nicht entwickelt wurden.
Es ist wichtig, verschiedene Softwareschichten zu trennen, um die Implementierung und Wartung von Software zu vereinfachen. Sollte eine Neuimplementierung eines Frontends in einem anderen GUI-Framework erforderlich sein, kann dies durch Modularität auf einfache und sichere Weise und ohne Unterbrechungen geschehen Code überall.
Ein Modul kapselt eine Sammlung von Komponenten, die alle einem in den Modulanforderungen definierten gemeinsamen Zweck dienen. Ein Modul sollte in sich abgeschlossen und vollständig sein und zwar nicht wirklich für sich allein verwendbar, es sollte jedoch in der Lage sein, mit jeder konformen Implementierung zusammenzuarbeiten.
In Bezug auf die Granularität befindet sich die Komponente zwischen dem Modul und dem Objekt. Der Zweck einer Komponente besteht darin, eine Sammlung von Allzweckobjekten zu einer zweckspezifischen Einheit zusammenzufassen.
Wie der Name schon sagt, ist die Komponente im Gegensatz zum Modul nicht "in sich geschlossen", sondern Teil eines größeren funktionalen Ganzen.
Objekte sind die kleineren Bausteine von Bauteilen. Objekte sind Sammlungen von Primitiven und verbinden sie, um einer niedrigeren Ebene zu dienen, die universeller ist und dennoch einen bestimmten Zweck hat.
Primitive sind die kleinste, einfachste und niedrigste Stufe der Softwareentwicklungsgranularität. Grundsätzlich handelt es sich nur um ganzzahlige und reelle Zahlen und Funktionen / Operatoren, obwohl die meisten Sprachen ihre eigenen zusätzlichen "erstklassigen Bürger" haben.
Mit Primitiven kann man sehr wenig anfangen, und gleichzeitig ist es auf einem so niedrigen Niveau, dass man praktisch alles damit erreichen kann. Es ist nur sehr, sehr wortreich, wahnsinnig kompliziert und unglaublich langwierig, wenn man direkt mit Primitiven arbeitet.
- Was hat das alles zu bedeuten?
Wie oben bereits erwähnt, ist das direkte Arbeiten mit Primitiven eine äußerst schlechte Idee. Nicht nur, weil es für die heutige Softwareentwicklung unglaublich komplex, langsam und mühsam ist, sondern auch extrem aufdringlich und hinderlich für Tests und Wartung.
Wenn alle diese konzeptionellen Teile in die Softwareentwicklung einbezogen werden, wird dies einfacher, schneller, einfacher und sicherer. Man macht kein Haus aus Atomen, egal wie vielseitig und universell Atome sind. Das wäre eine sinnlose Übung. Ihre Atome sind Ihre Primitiven, Ton ist Ihr Objekt, Ziegel sind Ihre Komponenten, Wände, Boden und Dach sind Ihre Module, zusammengesetzt manifestieren sie das Endprodukt.
Menschen erfinden eigentlich nichts, wir entdecken nur Dinge, die es bereits im Universum gibt, und kopieren sie dann und wenden sie auf unser Leben an. Dieselbe Granularitätshierarchie ist dem Universum selbst eigen, von Atomen und sogar darunter bis hin zu organischen Molekülen, Proteinen, Geweben, Organen, Organismen und darüber. Die Realität selbst folgt demselben Prinzip - sie kombiniert kleine, einfache, funktionsbeschränkte und zweckbezogene abstrakte Dinge größere, komplexere, funktionalere Dinge und spezifischere Dinge.
Technisch sind sie alle "Objekte", sie sind alle "Komponenten" der Softwareentwicklung, sie sind alle "modular" genug, um zusammenpassen zu können, sie sind alle "Produkte" in dem Sinne, wie sie produziert wurden und so weiter. ..
Hier geht es nicht um Terminologie oder Nomenklatur, sondern darum, wie sich das Vergrößern und Verkleinern auf verschiedene Aspekte von Kreativität und Produktivität auswirkt. Und darüber, wie wichtig es ist, nicht nur all diese verschiedenen Ebenen zu nutzen, sondern auch nicht zu versuchen, ein Ziel auf der falschen Ebene zu erreichen, was nur kontraproduktiv sein kann.