Для чего предназначены модули
Перейти к содержимому

Для чего предназначены модули

  • автор:

Модульное программирование

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

Модуль — функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом или поименованной непрерывной её части, предназначенный для использования в других программах. Модули позволяют разбивать сложные задачи на более мелкие в соответствии с принципом модульности. Обычно проектируются таким образом, чтобы предоставлять программистам удобную для многократного использования функциональность (интерфейс) в виде набора функций, классов, констант. Модули могут объединяться в пакеты и, далее, в библиотеки. Удобство использования модульной архитектуры заключается в возможности обновления (замены) модуля, без необходимости изменения остальной системы. В большинстве случаев различные модули могут запускаться как на одном сервере, так и на разных, для распределения нагрузки и создания распределенной архитектуры.

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

Суть модульного программирования состоит в разбиении сложной задачи на некоторое число более простых подзадач и составлении программ для решения достаточно независимо друг от друга. Модульность является одним из основных принципов построения программных проектов.

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

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

Модули служат также целям создания проблемно-ориентированного контекста и локализации машинной зависимости.

Концепция модульного программирования

Концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:

· Функциональная декомпозиция задачи — разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач — модулей. Модули связаны между собой только по входным и выходным данным.

· Модуль — основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой "черный ящик" с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и облегчает ее сопровождение. Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль.

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

Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.

Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.

В соответствии с данной методологией:

  1. Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций:

Последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;

Ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;

Цикл— многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).

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

  1. Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
  2. Нисходящий подход к разработке программ.

Разработка программы ведётся пошагово, методом «сверху вниз».

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

  1. Восходящий подход к разработке программ.

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

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

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

Теорема о структурном программировании

Любую схему алгоритма можно представить в виде композиции вложенных блоков begin и end, условных операторов if, then, else, циклов с предусловием (while) и может быть дополнительных логических переменных (флагов).

Эта теорема была сформулирована итальянскими математиками К. Бомом и Дж. Якопини в 1966 году и говорит нам о том, как можно избежать использования оператора перехода goto.

Достоинства структурного программирования:

  1. Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что ещё важнее, облегчает понимание её другими разработчиками.
  2. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блок-схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой).
  3. Сильно упрощается процесс тестирования и отладки структурированных программ.

Объектно-ориентированное программирование (сокращенно ООП) является методом программирования, имитирующим то, как человек выполняет какую-либо работу. Объектно-ориентированное программирование — результат естественной эволюции более ранних методологий программирования: оно более структурировано и более модульное и абстрактное, чем традиционное программирование. Эта технология является по существу прагматическим воплощением к 1980 году идеи абстрактных типов данных как идеальной основы в программной индустрии в наше время.

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

Основные признаки характеризуют объектно-ориентированную технологию программирования:

  1. Абстракция. Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик.
  2. Инкапсуляция. Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.
  3. Наследование. Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.
  4. Полиморфизм. Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
  5. Класс. Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
  6. Объект. Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение).
  7. Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.

Первым «настоящим» объектно-ориентированным языком программирования принято считать Смолтолк, разработанный в лаборатории компании Ксерокс. Затем появились и другие ОО языки (Си++, Паскаль, CLOS, Эйффель, Java и др.).

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

ООП ориентировано на разработку крупных программных комплексов, разрабатываемых командой программистов (возможно, достаточно большой). Проектирование системы в целом, создание отдельных компонентов и их объединение в конечный продукт при этом часто выполняется разными людьми, и нет ни одного специалиста, который знал бы о проекте всё.

Объектно-ориентированное проектирование состоит в описании структуры и поведения проектируемой системы, то есть, фактически, в ответе на два основных вопроса:

— Из каких частей состоит система;

— В чём состоит ответственность каждой из частей.

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

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

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

Родственные методологии

Компонентное программирование — следующий этап развития ООП; прототип- и класс — ориентированное программирование — разные подходы к созданию программы, которые могут комбинироваться, имеющие свои преимущества и недостатки.

Компонентное программирование

Компонентно-ориентированное программирование — это своеобразная «надстройка» над ООП, набор правил и ограничений, направленных на построение крупных развивающихся программных систем с большим временем жизни. Программная система в этой методологии представляет собой набор компонентов с хорошо определёнными интерфейсами. Изменения в существующую систему вносятся путём создания новых компонентов в дополнение или в качестве замены ранее существующих. При создании новых компонентов на основе ранее созданных запрещено использование наследования реализации — новый компонент может наследовать лишь интерфейсы базового. Таким образом, компонентное программирование обходит проблему хрупкости базового класса.

Прототипное программирование

Прототипное программирование, сохранив часть черт ООП, отказалось от базовых понятий — класса и наследования.

— Вместо механизма описания классов и порождения экземпляров язык предоставляет механизм создания объекта (путём задания набора полей и методов, которые объект должен иметь) и механизм клонирования объектов.

— Каждый вновь созданный объект является «экземпляром без класса». Каждый объект может стать прототипом — быть использован для создания нового объекта с помощью операции клонирования. После клонирования новый объект может быть изменён, в частности, дополнен новыми полями и методами.

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

Класс — ориентированное программирование

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

Соответственно в языках, основанных на понятии «класс», все объекты разделены на два основных типа — классы и экземпляры. Класс определяет структуру и функциональность (поведение), одинаковую для всех экземпляров данного класса. Экземпляр является носителем данных — то есть обладает состоянием, меняющимся в соответствии с поведением, заданным классом. В класс — ориентированных языках новый экземпляр создаётся через вызов конструктора класса (возможно, с набором параметров). Получившийся экземпляр имеет структуру и поведение, жёстко заданные его классом.

Объектно-ориентированные языки

Многие современные языки специально созданы для облегчения объектно-ориентированного программирования. Однако, следует отметить, что можно применять техники ООП и для не-объектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным.

Как правило, объектно-ориентированный язык (ООЯ) содержит следующий набор элементов:

— Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса).

— Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООЯ поддерживают только единичное наследование.

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

— Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООЯ все методы классов являются виртуальными.

Некоторые языки добавляют к указанному минимальному набору те или иные дополнительные средства. В их числе:

— Конструкторы, деструкторы, финализаторы.

— Средства управления видимостью компонентов классов (интерфейсы или модификаторы доступа, такие как public, private, protected, feature и др.).

Одни языки отвечают принципам ООП в полной мере — в них все основные элементы являются объектами, имеющими состояние и связанные методы. Примеры подобных языков — Smalltalk, Eiffel. Существуют гибридные языки, совмещающие объектную подсистему в целостном виде с подсистемами других парадигм как «два и более языка в одном», позволяющие совмещать в одной программе объектные модели с иными, и размывающие грань между объектно-ориентированной и другими парадигмами за счёт нестандартных возможностей, балансирующих между ООП и другими парадигмами (таких как множественная диспетчеризация, параметрические классы, возможность манипулировать методами классов как самостоятельными объектами, и др.). Примеры таких языков: CLOS, Dylan, OCaml, Python, Ruby, Objective-C. Однако, наиболее распространены языки, включающие средства эмуляции объектной модели поверх более традиционной императивной семантики. Алан Кэй назвал такие языки «склеиванием возможностей» (англ. agglutination of features) в противовес «чистоте стиля» (англ. crystalization of style) языков, воплощающих некую парадигму непосредственно. Примеры таких языков — Симула, C++, Visual Basic, Delphi, Модула, Модула-2, Java, C#, PHP.

Компьютерные модули. Описание преимуществ применения и обзор популярных стандартов

В статье рассматриваются особенности и преимущества использования компьютерных модулей при разработке промышленных вычислительных систем и комплексов. Приведены обзор наиболее популярных стандартов компьютерных модулей и примеры их применения.

Введение

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

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

Вариантом решения может быть использование готовых встраиваемых процессорных модулей, например компьютерных модулей (Сomputer on Module (CoM) или System on Module (SoM), одноплатных компьютеров (Single Board Computer (SBC) или материнских плат (Motherboard).

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

Проблемы проектирования и обеспечения серийного выпуска промышленного электронного оборудования

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

Помимо требований к производительности и масштабируемости, оборудование, предназначенное для промышленного применения, должно выпускаться в течение длительного срока, как правило от 10лет.

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

Преимущества модульного построения

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

Компьютерные модули (КМ) – хороший выбор для индустриальных применений, особенно где решения на базе стандартных одноплатных встраиваемых компьютеров не эффективны.

КМ помещает весь вычислительный узел в модуль малого форм-фактора, который может быть установлен на платах-носителях, содержащих специализированные схемы ввода-вывода и питания (рис.1).

Рисунок 1. Структура КМ и платы-носителя.

Рисунок 1. Структура КМ и платы-носителя.

Все стандартные функции персонального компьютера, такие как графика, Ethernet, звук, оперативная и постоянная память или интерфейсы для ее подключения, параллельный и последовательный порты, порты USB и системные шины (PCIe, PCI, ISA, I 2 C, SPI, LPC) размещаются в стандартном модуле. Пользователю нужно лишь добавить специально разработанную несущую плату (плату-носитель) для реализации определенных функций. На несущей плате (рис.2) размещаются все интерфейсные разъемы для подключения системы к периферийным устройствам, таким как жесткие диски, дисплеи и т. д.

Рисунок 2. Несущая плата с компьютерным модулем.

Рисунок 2. Несущая плата с компьютерным модулем.

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

Практически все преимущества использования КМ лежат в экономической плоскости. Самое главное преимущество – это снижение стоимости и сроков разработки.

Применение КМ может помочь производителям промышленного оборудования реализовать современные требования, сократив затраты и время разработки, необходимые для изменения существующих конструкций и расширения ассортимента продукции. Это справедливо, в частности, для устройств, которым требуется долговечность (жизненный цикл от 10 до 30 лет), а также современные производительность и возможности ввода-вывода.

Большинство компаний не обладают ресурсами по разработке с нуля вычислительного устройства на современных процессорах. Разработка, отладка и поддержка нового одноплатного компьютера для каждого поколения процессоров и современных быстродействующих шин могут быть чрезвычайно дорогостоящими и трудоемкими. На рис. 3 показано сравнение сроков полного и полузаказного проектирования.

При полностью самостоятельной разработке аппаратной части как правило разработчик затрачивает от 12 до 36 месяцев, не считая времени на разработку системного и прикладного программного обеспечения, тестирование, проведение испытаний, сертификацию и т.п.

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

Рисунок 3. Сравнение подходов при разработке вычислительного устройства.

Рисунок 3. Сравнение подходов при разработке вычислительного устройства.

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

При использовании КМ разработку аппаратной и программной частей решения можно вести параллельно. В то время, когда инженеры-схемотехники работают над архитектурой и трассировкой платы-носителя, программисты могут отрабатывать прикладное ПО, используя КМ и отладочную плату, предоставляемую производителем КМ специально для таких целей. Как правило, отладочные платы содержат большой набор интерфейсов, через который можно подключить необходимые модули расширения на основе стандартных форм-факторов и смоделировать аппаратную архитектуру системы.

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

Быстрота вывода продукции на рынок и гибкость при дальнейшей её модернизации являются серьезными преимуществами решений на базе КМ. Однако при принятии решения о начале использования КМ стоит серьёзно задуматься о наличии достаточного опыта и знаний для безошибочной разработки платы-носителя. Если такого опыта немного, лучше заказать разработку платы-носителя у производителя КМ. Если опыта достаточно и есть желание всё сделать самим, то, как минимум, нужно получить детальную консультацию, а ещё лучше, верифицировать у производителя КМ свой дизайн платы-носителя.

Обзор рынка

Мировой рынок КМ неуклонно растет с момента выпуска первого стандарта COM Express в 2005 году. С тех пор КМ нашли применение в самых разных вычислительных приборах и приложениях, особенно тех, которые требуют компактного размера и гибкого подхода для модернизации и адаптации под различные применения. Телекоммуникационное оборудование и аппаратура связи, сетевые устройства, игровые автоматы, устройства промышленной автоматизации и здравоохранения уже много лет назад начали применять КМ для реализации тех. требований к оборудованию. КМ и их масштабируемая архитектура особенно привлекательны для новых высокопроизводительных приложений, таких как искусственный интеллект (ИИ), интернет вещей, машинное зрение (ML), периферийные вычисления и аналитика и другие высокопроизводительные приложения.

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

По данным международного рейтингового агентства VDC Research VDC (рис. 4), мировой рынок встраиваемых компьютерных модулей начиная с 2020г показывает рост в 12, 4% и к 2025г. достигнет уровня 5,51 млрд. долларов США.

Рисунок 4. Объем продаж КМ за 2018-2023 гг (млн. долл. США)

Рисунок 4. Объем продаж КМ за 2018-2023 гг (млн. долл. США)

Популярность модулей COM Express основана на заложенной в стандарт гибкости, наличия нескольких типов размеров и назначений контактов при использовании общих разъемов и монтажных отверстий. КМ COM Express поддерживают высокоскоростные последовательные интерфейсы, включая PCI-Express Gen 3, 10GbE, USB 3.0, SATA, а также графику высокого разрешения. Альтернативные архитектуры, такие как Qseven и SMARC имеют свои уникальные преимущества, например использование процессоров с архитектурами ARM, x86 и RISC-V (рис. 5).

Рисунок 5. Рынок КМ, сегментированный по форм-факторам (% от общего объема продаж).

Рисунок 5. Рынок КМ, сегментированный по форм-факторам (% от общего объема продаж).

Стандарты компьютерных модулей

Для компьютерных компьютеров существует множество стандартов и форм-факторов, позволяющих быстро и эффективно создавать решения для тех или иных приложений практически во всех отраслях промышленности, телекоммуникаций, систем безопасности, транспорта, энергетики и др. Далее будут представлены стандарты компьютерных модулей ETX, QSeven, SMARC СOM Express, COM-HPC как наиболее популярные среди разработчиков и пользователей встраиваемых систем.

ETX

Исторически спецификация ETX (англ. Embedded Technology eXtended) появилась самой первой, и можно сказать, что с данной спецификации, разработанной компанией Kontron, фактически началась эра КМ.

Главная особенность данной спецификации заключается в наличии шины ISA. Соответственно КМ, производимые по данной спецификации, как правило, выбираются заказчиками тогда, когда им нужна данная шина.

Размер платы составляет 95×114 мм (рис. 6). Все сигналы ввода-вывода, а также полноценная реализация шин ISA и PCI выводятся на четыре низкопрофильных разъема типа HIROSE на нижней стороне платы.

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

Рисунок 6. Габаритные размеры модулей ETX

Рисунок 6. Габаритные размеры модулей ETX

КМ, производимые согласно спецификации ETX, до сих пор широко распространены при решении задач промышленной автоматизации, визуализации технологических процессов и в других приложениях, где не требуются высокая производительность процессора и наличие широкополосных коммуникационных интерфейсов (рис. 7).

Список основных интерфейсов и их распределение по разъёмам Х1. Х4 можно найти в табл. 1.

Рисунок 7. Внешний вид модуля ETX

Рисунок 7. Внешний вид модуля ETX

QSeven

Родоначальникам спецификации Qseven являются компании Congatec и Seco. Данная спецификация была разработана с целью удешевления КМ, сделав их более доступными и более приемлемыми для относительно лёгких и простых приложений.

Модули имеют стандартизированные габариты 70 x 70 или 40 x 70 мм (рис. 8). Данная спецификация предполагает использование всего одного разъёма типа MXM (такие разъёмы широко применяются для подключения высокоскоростных графических карт PCI Express в ноутбуках), устанавливаемого на плате носителе, и краевых двухсторонних контактов на плате КM.

Рисунок 8. Габаритные размеры модулей QSeven

Рисунок 8. Габаритные размеры модулей QSeven

Спецификация позволяет выводить дополнительные (определяемые производителем) интерфейсы ввода вывода в специально предназначенном для этого месте на плате КМ. Низкий бюджет теплового рассеяния предполагает использование маломощных процессоров, что в совокупности с возможностью отвода тепла через специальную теплопроводящую пластину позволяет создавать безвентиляторные решения.

Рисунок 9. Внешний вид модуля Qseven

Рисунок 9. Внешний вид модуля Qseven

Qseven позволяет использовать процессоры с архитектурой x86 и ARM. Благодаря своей тонкой конструкции, модули Qseven помещаются в компактные корпуса и, таким образом, идеально подходят для мобильных приложений и приложений IoT (рис. 9).

Основные характеристики модулей стандарта Qseven приведены в табл. 1.

SMARC

Стандарт SMARC («Smart Mobility ARChitecture») разработан консорциумом SGET в 2013 году. Модули стандарта быстро стали очень популярными масштабируемыми строительными блоками, позволяющими разработчикам создавать приложения нового поколения.

Рисунок 10. Габаритные размеры модулей SMARC

Рисунок 10. Габаритные размеры модулей SMARC

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

Кроме того, модули SMARC зарекомендовали себя при создании компактных портативных устройств, где энергопотребление не должно превышать нескольких ватт, а вычислительная мощность должна быть особенно высокой

Модули могут быть построены на процессорах с архитектурами ARM, X86 или RISC – аналогичных тем, которые используются во многих привычных устройствах, таких как планшетные компьютеры и смартфоны.

Рисунок 11. Внешний вид модуля SMARC

Рисунок 11. Внешний вид модуля SMARC

Спецификация определяет два размера модуля: 82 мм x 50 мм и 82 мм x 80 мм (рис.10). Основные характеристики модулей стандарта SMARC приведены в табл. 1.

Печатные платы модуля имеют 314 контактный краевой разъем, который соединяются с низкопрофильным 314-контактным прямоугольным разъемом на несущей плате (рис.11).

СOM Express

Стандарт COM Express описывает четыре типоразмера КМ, называемые Mini, Compact, Basic и Extended. Все четыре типоразмера имеют перекрывающиеся механические узлы, стандартизированные высоту и теплораспределители (рис. 12).

Рисунок 12. Габаритные размеры модулей COM Express

Рисунок 12. Габаритные размеры модулей COM Express

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

К основным характеристикам модулей Mini относятся:

Размер модуля: 84 мм x 55 мм

Варианты высоты стека между несущей платой и модулем 5 и 8 мм

Широкий диапазон входного напряжения питания (4,75-20 В)

Один 220-контактный разъем (2-й разъем обычно не используется)

Хотя это и не является обязательным требованием, модули Mini часто содержат напаянный Flash-накопитель.

Модули Compact предназначены для мобильных систем и стационарных систем с габаритными ограничениями. К основным характеристикам модулей относятся:

Размер модуля: 95 мм x 95 мм

Варианты высоты стека между несущей платой и модулем 5 и 8 мм

Высота модуля с теплоотводом 18 мм

Возможность установки одного (или двух сложенных) модулей SO-DIMM с горизонтальным креплением.

Два 220-контактных разъема.

Модули Basic предназначенs для мобильных систем и стационарных систем с габаритными ограничениями. К основным особенностям модулей Basic относятся:

Размер модуля: 125 мм x 95 мм.

Варианты высоты стека между несущей платой и модулем 5 и 8 мм

Высота модуля с теплоотводом 18 мм

Возможность установки одного (или двух сложенных) модулей SO-DIMM с горизонтальным креплением.

Два 220-контактных разъема.

Модули Extended, предназначены для заказных приложений, которым требуется больший объем системной памяти, допустим размер модуля для размещения полноразмерных модулей DIMM,

Ключевые особенности модулей Extended:

Размер модуля: 155 мм x 110 мм

Варианты высоты стека между несущей платой и модулем 5 и 8 мм

Высота модуля с теплоотводом 18 мм

Возможность установки двух полноразмерных модуля памяти DIMM или mini DIMM или 2 модуля SO-DIMM горизонтального или вертикального монтажа.

Два 220-контактных разъема.

Позволяет использовать ЦП с более высокой производительностью, которые не поддерживаются в модулях Compact и Basic.

Габарит Extended не популярен среди серийно-выпускаемых модулей COM Express

Присоединение КМ COM Express к платам-носителям осуществляется через один или два высокоплотных низкопрофильных разъёма со стандартизированным назначением контактов (рис. 13). Наиболее популярны типы «распиновок» с номерами 6, 7 и 10. Причём для каждого типа «распиновки» стандарт COM Express описывает набор обязательных интерфейсов (минимальный набор), и набор дополнительных интерфейсов (максимальный набор).

Рисунок 13. Внешний вид модулей COM Express

Рисунок 13. Внешний вид модулей COM Express

Основные характеристики модулей стандарта COM Express и описание интерфейсов для популярных типов распиновок контактов приведены в табл. 1.

СOM-HPC

Такие приложения как искусственный интеллект, технология беспроводной связи 5G требуют большой пропускной способности и вычислительной мощности. Это, в свою очередь, требует новых подходов к проектированию встраиваемых компьютеров: вычислительной мощности существующих стандартов уже недостаточно для обеспечения растущих требований рынка встраиваемых систем по производительности и пропускной способности.

Ведущие производители компьютерных модулей и встраиваемых систем входящих в консорциум PICMG создали новую стандарт компьютерных модулей под названием COM-HPC, призванный дополнять существующий стандарт COM Express в части облегчения создания высокопроизводительных приложений.

По сравнению с COM Express, стандарт COM-HPC обеспечивает более высокую производительность встраиваемых систем. 440 контактов модуля COM Express уже недостаточно для создания мощных вычислительных устройств. К тому же производительность разъема COM Express также постепенно приближается к пределу: хотя COM Express может легко работать с тактовой частотой 8,0 ГГц и пропускной способностью 8 Гбит/с PCIe Gen 3.

Рисунок 14. Габаритные размеры модулей COM-HPC

Рисунок 14. Габаритные размеры модулей COM-HPC

Определены три типоразмера модулей COM-HPC (рис. 14):

клиентский модуль COM-HPC/Client. Предназначен для использования в вычислительных устройствах, которым требуется один или несколько дисплеев, набор интерфейсов ввода-вывода с низкой, средней и очень высокой пропускной способностью, мощные процессоры и компактные размеры. Типичными областями применения являются медицинское оборудование, высокоточные или высокопроизводительные приборы, промышленное оборудование, игровые автоматы для казино, защищенные компьютеры для применения на транспорте и т.п. Клиентские модули обычно используют SO-DIMM или припаянную память. На модуле может быть установлено до четырех модулей памяти SO-DIMM. Размеры модулей и набор интерфейсов приведены в табл 1.

серверный модуль COM-HPC/Server. Предназначен для использования в высокопроизводительных встраиваемых серверах без поддержки видео, которым требуется высокая производительности ЦП (до 150 Вт), большой объем памяти и большое количество операций ввода-вывода с высокой пропускной способностью, включая несколько каналов Ethernet 10 Гбит/с или 25 Гбит/с и до 65 каналов PCIe на скорости до PCIe Gen 5. Типичное применение — встраиваемое серверное оборудование, предназначенное для использования в полевых условиях и такие приложения, как автономные транспортные средства, базовые станции вышек сотовой связи, медицинское оборудование, системы специального назначения и т.п.. В серверных модулях обычно используются полноразмерные модули DIMM. В самом большом форм-факторе модуля COM-HPC может быть реализовано до восьми полноразмерных модулей памяти DIMM. Типовые размеры модулей и набор интерфейсов описаны в табл. 1.

COM-HPC Mini. Это новый перспективный стандарт КМ, который в настоящее время разрабатывается консорциумом PICMG с целью получения компактного высокопроизводительного стандартизированного КМ. Габариты модулей нового типа составляют всего 95 × 60 мм (рис. 15). Этого удалось добиться путём отказа от одного из разъёмов, так что контактов у COM-HPC Mini всего 400. По коммутационным возможностям это 90% от возможностей COM Express Type 6 (125 × 96 мм). На данный момент размеры и «распиновка» COM-HPC Mini финализированы, минимальные изменения в стандарт могут быть внесены в I и II кварталах 2023 года.

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

Рисунок 16. Внешний вид модулей COM-HPC

Рисунок 16. Внешний вид модулей COM-HPC

В COM-HPC используется 400 контактные разъемы. На модуле может быть установлено один или два таких разъемов, что обеспечивает высокую пропускную способность на основе 800 контактов (рис. 16).

Для чего предназначены модули

Практична робота до предмету Інформатика 11 клас.

Розгляд теми: Форуми та їх призначення. Правила роботи у форумах.

БАЗЫ ДАННЫХ

1. База данных — это:

1. совокупность данных, организованных по определенным правилам;
2. совокупность программ для хранения и обработки больших массивов информации;
3. интерфейс, поддерживающий наполнение и манипулирование данными;
4. определенная совокупность информации.

2. Наиболее распространенными в практике являются:

1. распределенные базы данных;
2. иерархические базы данных;
3. сетевые базы данных;
4. реляционные базы данных.

3. Наиболее точным аналогом реляционной базы данных может служить:

1. неупорядоченное множество данных;
2. вектор;
3. генеалогическое дерево;
4. двумерная таблица.


4. Таблицы в базах данных предназначены:

1. для хранения данных базы;
2. для отбора и обработки данных базы;
3. для ввода данных базы и их просмотра;
4. для автоматического выполнения группы команд;
5. для выполнения сложных программных действий.

5. Что из перечисленного не является объектом Access:

1. модули;
2. таблицы;
3. макросы;
4. ключи;
5. формы;
6. отчеты;
7. запросы?

6. Для чего предназначены запросы:

1. для хранения данных базы;
2. для отбора и обработки данных базы;
3. для ввода данных базы и их просмотра;
4. для автоматического выполнения группы команд;
5. для выполнения сложных программных действий;
6. для вывода обработанных данных базы на принтер?

7. Для чего предназначены формы:

1. для хранения данных базы;
2. для отбора и обработки данных базы;
3. для ввода данных базы и их просмотра;
4. для автоматического выполнения группы команд;
5. для выполнения сложных программных действий?


8. Для чего предназначены модули:

1. для хранения данных базы;
2. для отбора и обработки данных базы;
3. для ввода данных базы и их просмотра;
4. для автоматического выполнения группы команд;
5. для выполнения сложных программных действий?

9. Для чего предназначены макросы:

1. для хранения данных базы;
2. для отбора и обработки данных базы;
3. для ввода данных базы и их просмотра;
4. для автоматического выполнения группы команд;
5. для выполнения сложных программных действий?


10. В каком режиме работает с базой данных пользователь:

1. в проектировочном;
2. в любительском;
3. в заданном;
4. в эксплутационном?


11. В каком диалоговом окне создают связи между полями таблиц базы данных:

1. таблица связей;
2. схема связей;
3. схема данных;
4. таблица данных?


12. Почему при закрытии таблицы программа Access не предлагает выполнить сохранение внесенных данных:

1. недоработка программы;
2. потому что данные сохраняются сразу после ввода в таблицу;
3. потому что данные сохраняются только после закрытия всей базы данных?


13. Без каких объектов не может существовать база данных:

1. без модулей;
2. без отчетов;
3. без таблиц;
4. без форм;
5. без макросов;
6. без запросов?

14. В каких элементах таблицы хранятся данные базы:

1. в полях;
2. в строках;
3. в столбцах;
4. в записях;
5. в ячейках?


15. Содержит ли какую-либо информацию таблица, в которой нет ни одной записи?

1. пустая таблица не содержит ни какой информации;
2. пустая таблица содержит информацию о структуре базы данных;
3. пустая таблица содержит информацию о будущих записях;
4. таблица без записей существовать не может.


16. Содержит ли какую-либо информацию таблица, в которой нет полей?

1. содержит информацию о структуре базы данных;
2. не содержит ни какой информации;
3. таблица без полей существовать не может;
4. содержит информацию о будущих записях.


17. В чем состоит особенность поля «счетчик»?

1. служит для ввода числовых данных;
2. служит для ввода действительных чисел;
3. данные хранятся не в поле, а в другом месте, а в поле хранится только указатель на то, где расположен текст;
4. имеет ограниченный размер;
5. имеет свойство автоматического наращивания.


18. В чем состоит особенность поля «мемо»?

1. служит для ввода числовых данных;
2. служит для ввода действительных чисел;
3. данные хранятся не в поле, а в другом месте, а в поле хранится только указатель на то, где расположен текст;
4. имеет ограниченный размер;
5. имеет свойство автоматического наращивания.


19. Какое поле можно считать уникальным?

1. поле, значения в котором не могут повторятся;
2. поле, которое носит уникальное имя;
3. поле, значение которого имеют свойство наращивания.


20. Ключами поиска в системах управления базами данных (СУБД) называются:

1. диапазон записей файла БД, в котором осуществляется поиск;
2. логические выражения, определяющие условия поиска;
3. поля, по значению которых осуществляется поиск;
4. номера записей, удовлетворяющих условиям поиска;
5. номер первой по порядку записи, удовлетворяющей условиям поиска?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 4 4 1 4 2 3 5 4 4 3 2 3 5 2 3 5 3 1 3

Надіслано вчителем інформатики Спеціалізованої школи № 252 Оболонського району м. Києва Житинською О.І.

Інформатика за 11 клас безкоштовно скачати, плани конспектів уроків, готуємось до школи онлайн

2.2. Модули и их свойства

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

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

процедурный (или структурный — по названию подхода);

Примечание. Помимо указанных способов декомпозиции, в теории программирования определяют и другие способы декомпозиции: логическую — на факты и правила, продукционную — на правила продукции и т.п. Эти способы декомпозиции используют в языках искусственного интеллекта, поэтому в настоящем учебнике они рассматриваться не будут.

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

Результатом объектной декомпозиции является совокупность объектов, которые затем реализуют как переменные некоторых специально разрабатываемых типов (классов), представляющих собой совокупность полей данных и методов, работающих с этими полями.

Таким образом, при любом способе декомпозиции получают набор связанных с соответствующими данными подпрограмм, которые в процессе реализации организуют в модули.

Модули. Модулем называют автономно компилируемую программную единицу. Термин «модуль» традиционно используется в двух смыслах. Первоначально, когда размер программ был сравнительно невелик, и все подпрограммы компилировались отдельно, под модулем понималась подпрограмма, т.е. последовательность связанных фрагментов программы, обращение к которой выполняется по имени. Со временем, когда размер программ значительно вырос, и появилась возможность создавать библиотеки ресурсов: констант, переменных, описаний типов, классов и подпрограмм, термин «модуль» стал использоваться и в смысле автономно компилируемый набор программных ресурсов.

Данные модуль может получать и/или возвращать через общие области памяти или параметры.

Первоначально к модулям (еще понимаемым как подпрограммы) предъявлялись следующие требования:

одна точка входа;

одна точка выхода;

соответствие принципу вертикального управления;

возможность вызова других модулей;

небольшой размер (до 50-60 операторов языка);

независимость от истории вызовов;

выполнение одной функции.

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

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

Практика показала, что чем выше степень независимости модулей, тем:

легче разобраться в отдельном модуле и всей программе и, соответственно, тестировать, отлаживать и модифицировать ее;

меньше вероятность появления новых ошибок при исправлении старых или внесении изменений в программу, т. е. вероятность появления «волнового» эффекта;

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

Таким образом, уменьшение зависимости модулей улучшает технологичность проекта. Степень независимости модулей (как подпрограмм, так и библиотек) оценивают двумя критериями: сцеплением и связностью.

Сцепление модулей. Сцепление является мерой взаимозависимости модулей, которая определяет, насколько хорошо модули отделены друг от друга. Модули независимы, если каждый из них не содержит о другом никакой информации. Чем больше информации о других модулях хранит модуль, тем больше он с ними сцеплен.

Различают пять типов сцепления модулей:

по общей области данных;

Сцепление по данным предполагает, что модули обмениваются данными, представленными скалярными значениями. При небольшом количестве передаваемых параметров этот тип обеспечивает наилучшие технологические характеристики программного обеспечения.

Например, функция Мах предполагает сцепление по данным через параметры скалярного типа:

Function Max(a, b: integer):integer;

if a>b then Max:=a

Сцепление по образцу предполагает, что модули обмениваются данными, объединенными в структуры. Этот тип также обеспечивает неплохие характеристики, но они хуже, чем у предыдущего типа, так как конкретные передаваемые данные «спрятаны» в структуры, и потому уменьшается «прозрачность» связи между модулями. Кроме того, при изменении структуры передаваемых данных необходимо модифицировать все использующие ее модули.

Так, функция MaxEl, описанная ниже, предполагает сцепление по образцу (параметр а – открытый массив).

Function МахEl(а:array of integer):integer;

for i:=l to High(a) do

if a[i]>MaxEl then MaxEl: =a[i];

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

Например, функция MinMax предполагает сцепление по управлению, так как значение параметра flag влияет на логику программы: если функция MinMax получает значение параметра flag, равное true, то возвращает максимальное значение из двух, а если false, то минимальное:

Function MinMax(a, b:integer; flag:boolean):integer;

if (a>b) and (flag) then MinMax: =a

else MinMax: =b;

Сцепление по общей области данных предполагает, что модули работают с общей областью данных. Этот тип сцепления считается недопустимым, поскольку:

программы, использующие данный тип сцепления, очень сложны для понимания при сопровождении программного обеспечения;

ошибка одного модуля, приводящая к изменению общих данных, может проявиться при выполнении другого модуля, что существенно усложняет локализацию ошибок;

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

Function MaxA:integer;

МахА: =a[Low(a)];

for i:= Low(a)+1 to High(a) do

if a[i]>MaxA then MaxA:=a[i];

Следует иметь в виду, что «подпрограммы с памятью», действия которых зависят от истории вызовов, используют сцепление по общей области, что делает их работу в общем случае непредсказуемой. Именно этот вариант используют статические переменные С и C++.

В случае сцепления по содержимому один модуль содержит обращения к внутренним компонентам другого (передает управление внутрь, читает и/или изменяет внутренние данные или сами коды), что полностью противоречит блочно-иерархическому подходу. Отдельный модуль в этом случае уже не является блоком («черным ящиком»): его содержимое должно учитываться в процессе разработки другого модуля. Современные универсальные языки процедурного программирования, например Pascal, данного типа сцепления в явном виде не поддерживают, но для языков низкого уровня, например Ассемблера, такой вид сцепления остается возможным.

В табл. 2.1 приведены характеристики различных типов сцепления по экспертным оценкам [21, 30]. Допустимыми считают первые три типа сцепления, так как использование остальных приводит к резкому ухудшению технологичности программ.

По общей области

* Зависит от количества параметров интерфейса.

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

В некоторых случаях сцепление модулей можно уменьшить, удалив необязательные связи и структурировав необходимые связи. Примером может служить объектно-ориентированное программирование, в котором вместо большого количества параметров метод неявно получает адрес области (структуры), в которой расположены поля объекта, и явно – дополнительные параметры. В результате модули оказываются сцепленными по образцу.

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

Различают следующие виды связности (в порядке убывания уровня):

При функциональной связности все объекты модуля предназначены для выполнения одной функции (рис. 2.1, а): операции, объединяемые для выполнения одной функции, или данные, связанные с одной функцией. Модуль, элементы которого связаны функционально, имеет четко определенную цель, при его вызове выполняется одна задача, например, подпрограмма поиска минимального элемента массива. Такой модуль имеет максимальную связность, следствием которой являются его хорошие технологические качества: простота тестирования, модификации и сопровождения. Именно с этим связано одно из требований структурной декомпозиции «один модуль – одна функция».

Из тех же соображений следует избегать неструктурированного распределения функции между модулями– библиотеками ресурсов. Например, если при проектировании текстового редактора предпо­лагается функция редактирования, то лучше организо­вать модуль– биб­лиотеку функций редактирования, чем поместить часть функций в один модуль, а часть в другой.

При последо­вательной связно­сти функций вы­ход одной функции служит исходными данными для дру­гой функции (рис. 2.1, б). Как правило, такой модуль имеет одну точку входа, т.е. реализует одну подпро­грамму, выполняющую две функции. Считают, что данные, используемые последователь­ными функциями, также связаны последовательно. Модуль с последовательной связностью функций можно разбить на два или более модулей, как с последовательной, так и с функ­циональной связностью. Такой модуль выполняет несколько функций, и, следовательно, его технологичность хуже: сложнее организовать тестирование, а при выполнении модификации мысленно приходится разделять функции модуля.

Информационно связанными считают функции, обрабатывающие одни и те же данные (рис. 2.1, в). При использовании структурных языков программирования раздельное выполнение функций можно осуществить только, если каждая функция реализуется своей подпрограммой. Хотя раньше в подобных случаях обычно использовали разные точки входа в модуль, оформленный как одна подпрограмма.

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

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

Временная связность функций подразумевает, что эти функции выполняются параллельно или в течение некоторого периода времени (рис. 2.1, д). Временная связность данных означает, что они используются в некотором временном интервале. Например, временную связность имеют функции, выполняемые при инициализации некоторого процесса. Отличительной особенностью временной связности является то, что действия, реализуемые такими функциями, обычно могут выполняться в любом порядке. Содержание модуля с временной связностью функций имеет тенденцию меняться: в него могут включаться новые действия и/или исключаться старые. Большая вероятность модификации функции еще больше уменьшает показатели технологичности модулей данного вида по сравнению с предыдущим.

Логическая связь базируется на объединении данных или функций в одну логическую группу (рис. 2.1, е). В качестве примера можно привести функции обработки текстовой информации или данные одного и того же типа. Модуль с логической связностью функций часто реализует альтернативные варианты одной операции, например, сложение целых чисел и сложение вещественных чисел. Из такого модуля всегда будет вызываться одна какая-либо его часть, при этом вызывающий и вызываемый модули будут связаны по управлению. Понять логику работы модулей, содержащих логически связанные компоненты, как правило, сложнее, чем модулей, использующих временную связность, следовательно их показатели технологичности еще ниже.

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

Обратите внимание, что в трех предпоследних случаях связь между несколькими подпрограммами в модуле обусловлена внешними причинами. А в последнем – вообще отсутствует. Это соответствующим образом проецируется на технологические характеристики модулей. В табл. 2.2 представлены характеристики различных видов связности по экспертным оценкам [21, 30].

Анализ табл. 2.2 показывает, что на практике целесообразно использовать функциональную, последовательную и информационную связности.

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

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