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


Три компонента описания системы
Рис. 1. Три проекции описания системы по стандарту ISO 81346-1


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


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


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


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


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


Принципиальная схема компонентов блока питания выглядит так:
Схема компонентов блока питания
Рис. 2. Схема компонентов блоки питания


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


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


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


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


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


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


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


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


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


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


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


Резюме


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


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

Комментарии (12)


  1. maxim_ge
    17.06.2022 12:11

    Интересная статья, спасибо. Вот такой момент:


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

    Поискав, я обнаружил отечественный ГОСТ Р 58908.1-2020, который видимо, аналог IEC 81346-1:2009. Там пишут так:


    3.6 продукт (product): Предполагаемый или достигнутый результат труда, естественного или искусственного процесса.
    3.7 компонент (component): Продукт (изделие), используемый в качестве составной части собранного продукта (изделия), системы или установки.


    1. pprometey Автор
      17.06.2022 12:21

      О, тут надо читать источники в оригинале (на английском). В данном случае я предлагаю напрямую задать этот вопрос Анатолию Левенчуку, он автор того курса, я думаю он лучше меня ответит на этот вопрос. Мой источник - это курс по системному мышлению, откуда я и взял эту информацию.


      1. Ndochp
        17.06.2022 14:34

        Там в курсе(книге) ровно так и написано: не путайте модули и компоненты (функциональные и конструктивные блоки) внутри головы. В разных стандартах названия могут отличаться вплоть до противоположных, это не должно вас запутать. Главное убедитесь, что вы понимаете в каком смысле использует слово собеседник и отвечаете ему в той же парадигме.


        1. pprometey Автор
          17.06.2022 21:12

          Да. Там в курсе целая глава уделена тому, чтобы не было "понятийного фашизма". Важно чтобы люди понимали друг друга, а не то, чей ярлык "более правильный".

          Но при всем при том, он на основе стандартов ISO, дает рекомендацию. Что компонент функциональная единица, а модуль - конструктивная. Но если у собеседника в голове противоположная система координат, то быть более умным, т.е. понятным, и говорить с ним в комфортной для него системе координат, чтобы лучше найти общий язык и понимание.


      1. maxim_ge
        17.06.2022 17:41

        Хорошо, вот на "языке оригинала":


        3.4
        component
        product used as a constituent in an assembled product, system or plant
        [SOURCE:IEC 81346‑1:2009, 3.7]


        1. pprometey Автор
          17.06.2022 21:34

          Спасибо. Я попробую задать этот вопрос Левенчуку, сообщу вам ответ.


    1. CDCrom
      17.06.2022 12:55

      Здесь, как во всей стандартизации нужно смотреть на дату издания стандарта, в данном случае ГОСТ Р принимает редакцию международного стандарта от IEC 81346-1:2009 (2009 года), тогда как сейчас уже есть новая редакция IEC 81346-1:2022, ну и если быть еще более занудным стандарт это серия из нескольких документов:
      IEC 81346-1:2022 - Part 1: Basic rules
      IEC 81346-2:2019 - Part 2: Classification of objects and codes for classes
      ISO/TS 81346-10:2015 (сейчас делается новая редакция) - Part 10: Power plants
      ISO 81346-12:2018 - Part 12: Construction works and building services

      Почему такая странная нумерация, я могу только гадать...знаю только, что третью часть (Part 3: Application rules for a reference designation system) отменили, а других на сайте ISO.org нет

      Как итог нужно проверять что принято в РФ с международными стандартами, а как я понял Анатолий Ливенчук ориентируется на последние данные..может там по этой причине и есть расхождения... а может там и сейчас всё так же...


      1. maxim_ge
        17.06.2022 17:45

        ISO 81346-12:2018 — Part 12: Construction works and building services

        Из этого стандарта я выше привел цитату. Цитата ссылается на 81346‑1:2009 и по смыслу соответствует отечественной верии. Т.е. на 2018 год ничего не изменилось.


  1. Zenitchik
    17.06.2022 14:11
    +1

    В статье под видом "схемы компонентов" дана фотография. Это выглядит некрасиво. Фотография - это не схема.


    1. pprometey Автор
      17.06.2022 14:18
      -1

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


      1. Zenitchik
        17.06.2022 16:12
        +1

        Извините, конечно, "схема модулей". Я слишком поздно заметил ошибку и не успел исправить.

        Моя претензия в том, что статья вообще не проясняет, что такое "схема модулей" и как она выглядит.


  1. ptica_filin
    17.06.2022 20:09
    +1

    А чем плохи определения типов схем из ГОСТ 2.701-2008?

    https://docs.cntd.ru/document/1200069439

    Что в статье называется "схема компонентов" - это электрическая принципиальная схема. Или, если не требуется детализация до каждого резистора и конденсатора, то подойдёт функциональная схема. На ней отмечаются основные функциональные узлы (усилитель, компаратор, преобразователь питания и т.д.).

    "Схема модулей" - это или структурная схема, или общая, а то и схема расположения (в зависимости от задач, которые решает эта схема).

    А фотография блока питания - это и не схема вовсе. Скорее ближе к сборочному чертежу :)