Если мы хотим абстрагироваться от определенных языков, структур и их собственных интерпретаций, иерархия гранулярности абстрактного программного обеспечения следующая:
Product - application, library, service
Module - GUI, core logic, data, etc...
Component - purpose specific collection of objects
Object - collection of primitives
Primitive - numbers, functions, etc...
Простой и понятный, продукт представляет собой рабочую коллекцию подключенных функциональных модулей.
Как следует из самого названия, мотивация модуля - модульность. Вопреки тому, что многие утверждают, это на самом деле не подразумевает повторное использование кода. Есть много модулей, которые на самом деле не пригодны для повторного использования и не подходят ни для чего, для чего они не были предназначены.
Важно разделить разные уровни программного обеспечения, что значительно упрощает внедрение и обслуживание программного обеспечения, и в случае необходимости перераспределения чего-то вроде внешнего интерфейса в другую структуру графического интерфейса модульность делает это возможным простым и безопасным образом, не нарушая код повсюду.
Модуль инкапсулирует набор компонентов, которые служат общей цели, определенной требованиями модуля. Модуль должен быть самодостаточным и законченным, и хотя сам по себе он не может использоваться на самом деле, он должен иметь возможность работать в сочетании с любой соответствующей реализацией.
С точки зрения детализации Компонент находится между Модулем и Объектом. Назначение компонента состоит в том, чтобы собрать коллекцию объектов общего назначения в единое целевое устройство.
Как следует из названия, в отличие от модуля, компонент не является «автономным», он является частью большего функционального целого.
Объекты - это меньшие строительные блоки компонентов. Объекты представляют собой наборы примитивов и соединяют их вместе, чтобы служить более низкому уровню, более универсальному, но все же до некоторой степени предназначенному.
Примитивы - это самый маленький, самый простой и самый низкий уровень детализации разработки программного обеспечения. В основном это просто целые и действительные числа и функции / операторы, хотя у большинства языков есть свои дополнительные «первоклассные граждане».
С примитивами очень мало что можно сделать, и в то же время он находится на таком низком уровне, что с ним можно выполнить практически все. Это просто очень, очень многословно, безумно сложно и невероятно утомительно для выполнения при непосредственной работе с примитивами.
Как уже упоминалось выше, работать с примитивами напрямую - крайне плохая идея. Не только потому, что это невероятно сложно, медленно и утомительно для современной разработки программного обеспечения, но также чрезвычайно навязчиво и препятствует тестированию и обслуживанию.
Включение всех этих концептуальных частей в разработку программного обеспечения делает его проще, быстрее, проще и безопаснее. Вы не строите дом из атомов, независимо от того, насколько универсальны и универсальны атомы. Это было бы бесполезным упражнением. Ваши атомы - ваши примитивы, глина - ваш объект, кирпичи - ваши компоненты, стены, пол и крыша - ваши модули, собранные вместе, они представляют собой конечный продукт.
Люди на самом деле ничего не изобретают, мы только обнаруживаем вещи, уже существующие во вселенной, а затем копируем и применяем их в нашей жизни. Та же иерархия гранулярности присуща самой вселенной, от атомов и даже ниже, до органических молекул, белков, тканей, органов, организмов и выше, сама реальность подчиняется одному и тому же принципу - объединяет маленькие, простые, функционально ограниченные и целевые абстрактные вещи в большие, более сложные, более функциональные вещи и более конкретные вещи.
- Терминология предостережения
Технически они все являются «объектами», все они являются «компонентами» разработки программного обеспечения, они все «достаточно модульны», чтобы их можно было совместить друг с другом, все они являются «продуктами» в том смысле, что они были произведены и так далее. ..
Речь идет не о терминологии или номенклатуре, а о том, как масштабирование вещей влияет на различные аспекты творчества и продуктивности. И о важности не только использования всех этих разных уровней, но и о важности не пытаться достичь цели на неправильном уровне, что может быть только контрпродуктивным.