Модуль vs Компонент

от автора

Чем модуль отличается от компонента. Чем схема модулей отличается от схемы компонентов.

Три компонента описания системы

Очень часто сталкиваюсь с тем, что даже опытные инженеры, да и не только они путают эти понятия. Хотя есть четкие стандарты (например ISO 81346) которые определяют их. Если вы будете гуглить, то зачастую схема компонентов может называться схема модулей, а схема модулей — схемой компонентов. Так в чем же разница, и как их отличить?

Компонент — это функциональная единица.
Схема компонентов — ее цель ответить на вопрос «Как это работает?».
Модуль — это конструктивная единица.
Схема модулей — ее цель, ответить на вопрос — «Из чего это состоит?».

Схема компонентов отражает функциональное назначение системы, схема модулей отражает физическую структуру системы (конструктивную).

Проще всего наглядно увидеть разницу между схемой компонентов и модулей, если посмотреть на блок питания компьютера.

Схема компонентов

Принципиальная схема компонентов блока питания выглядит так:
Схема компонентов блока питания
Данная схема состоит из компонентов, каждый из которых несет свою функциональную нагрузку. Допустим электрическое сопротивление (резистор) — R4 и указан номинал этого сопротивления, допустим 5 Ом. С точки зрения схемы компонентов, не важно что это за резистор, из какого материала сделан, его номер на заводе, его форм-фактор и внешний вид. Эта информация относиться больше к схеме модулей. С точки зрения схемы компонентов важно что делает этот компонент, и какие его характеристики с точки зрения той работы, которую он выполняет. В нашем случае, если это сопротивление, то с какой силой это сопротивление.

Схема модулей

А вот схема модулей блока питания
Схема модулей блока питания

Схема модулей отражает физическое воплощение системы, ее структуру. Т.е. из каких конкретных элементов состоит эта система, которая выполняет работу, описанную на схеме компонентов. Один модуль может содержать в себе несколько компонентов, и наоборот, один компонент может быть распределен по нескольким модулям.

Если компоненты как правило, это больше абстракции, целью которых служит показать принцип и схему работы системы, то модули это как правило уже конкретные физические объекты реального мира, которые имеют соответствующие атрибуты: производитель, модельный номер, материал изготовления, размеры, объем и т.д.

Задача инженера, спроектировать такую схему компонентов, которые работая в совокупности, будут максимально эффективно выполнять ту задачу, которая стоит перед инженером. А затем максимально эффективно распределить эти компоненты по модулям, чтобы в конечном итоге это было как можно более надежно, компактно, эффективно.

С точки зрения программной инженерии

Если это переносить в область программной инженерии, то модули в программной инженерии — это библиотеки, исполняемые файлы, пакеты (nuget, js и т.д). Так же к модулям можно отнести проекты (cproj), подпроекты, файлы исходного кода (cs, cpp), но это уже модули описания системы, а не ее воплощения. В системной инженерии принято разделять саму систему, и описание системы. К описанию системы относятся исходные коды, документация и т.д. А сама система — это уже скомпилированные файлы и данные, работающие в продуктовом окружении, и делающие полезную работу, ради которой собственно и создавалась эта система.

Так вот, компонентами в программной инженерии является те сущности, и логика предметной области, которые мы описываем в наших файлах исходных кодов. Это те абстракции, выявленные в ходе предметно-ориентированного проектирования (и объектно-ориентированного в том числе, как фундамента для предметно-ориентированного проектирования), это те классы их методы которые описывают ту работу, которая выполняет запрограммированная нами система.

Если говорить довольно упрощенно, то модули — это те файлы и проекты, в которых мы пишем наш код. и те библиотеки, докер-контейнеры, микросервисы как выходные результаты наших исходных текстов, А компоненты, это — то логическое наполнение, которое записываем в этих исходных файлах, и которое на машинном уровне превращается уже в конкретные команды процессору.

Схемы компонентов не обязательно бывают такие сложными, как принципиальная электронная схема блока питания. Вот так же простой пример схемы компонентов говнокодинга:
Схема компонентов говнокодинга

Резюме

Схема компонентов — описывает систему с функциональной точки зрения (т.е. как это работает)
Схема модулей — описывает систему с конструктивной точки зрения (из чего это состоит)

Данное определение дано на на базе курса по системному мышлению от Анатолия Левенчука.


ссылка на оригинал статьи https://habr.com/ru/post/671916/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *