Объект, система, модель, моделирование

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

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

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

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

Создание универсальных моделей - это следствие использование системного подхода.

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

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

Использование компьютера при моделировании возможно по трем направлениям:

1. Вычислительное - прямые расчеты по программе.

2. Инструментальное - построение базы знаний, для преобразования ее в алгоритм и программу.

3. Диалоговое - поддержание интерфейса между исследователем и компьютером.

9.2. Виды моделей. Информационная модель

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

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

цель использования;

область знаний;

фактор времени;

способ представления.

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

По области знаний выделяются модели биологические, экономические, исторические, социологические и т.д.

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

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

Материальные модели - это материальные копии объектов моделирования.

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

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

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

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

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

Рассмотрим подробнее класс информационных моделей с позиции способов представления информации. Форма представления информационной модели зависит от способа кодирования (алфавита) и материального носителя.

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

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

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

Образно-знаковое моделирование использует знаковые образы какого-либо вида: схемы, графы, чертежи, графики, планы, карты (см. Рис.3). Например, географическая карта, план квартиры, родословное дерево, блок-схема алгоритма. К этой группе относятся структурные информационные модели, создаваемые для наглядного изображения составных частей и связей объектов. Наиболее простые и распространенные информационные структуры - это таблицы, схемы, графы, блок-схемы, деревья.

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

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

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

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

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

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

9.3. Этапы моделирования. Создание моделей

Процесс решения задач осуществляется в несколько этапов:

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

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

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

На заключительном этапе производится эксплуатация модели и получение результатов.

Таким образом, решение задачи включает следующие этапы:

1. Содержательная постановка задачи.

2. Системный анализ.

3. Системный синтез (математическая постановка задачи)

4. Разработка или выбор программного обеспечения.

5. Решение задачи.

9.4. Компьютерное моделирование

Рассмотрим последовательность этапов компьютерного моделирования на примере вычисления площади треугольника.

Постановка задачи. Вычислить площадь треугольника S по заданным сторонам а, b, с. Объект моделирования - треугольник. Для содержательного описания объекта надо ответить на следующие вопросы.

а) Что должна делать программа?

б) Какие у нее исходные данные, и какие результаты?

По возможности необходимо сформулировать условия, которым должны удовлетворять исходные данные и результаты работы программы. Разрабатываемая программа должна вычислять площадь треугольника по трем сторонам. Исходные данные: переменные а, b, с - стороны треугольника. Вычисляемый результат: S - площадь треугольника. По смыслу задачи а, b, с, S положительны, причем не всякая тройка чисел образует длины сторон треугольника.

Чтобы числа а, b, с могли быть длинами сторон треугольника, необходимо и достаточно, чтобы большее из них было меньше суммы двух других (известное из геометрии неравенство треугольника). Но вот вопрос: следует ли считать, что вводимые значения а, b, c удовлетворяют этому условию, или программа должна предусматривать дополнительную проверку? Отвечая на него, мы обнаруживаем, что постановка задачи не является столь ясной, какой она показалась на первый взгляд. А значит, в нее нужно внести одно из дополнений: "a, b, с заведомо являются сторонами треугольника" или "Следует вычислить площадь, если а, b, с - стороны треугольника, а в противном случае выдавать сообщение: а, b, с не являются сторонами треугольника". Теперь от нашего выбора зависит работа будущей программы.

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

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

Пусть max(a,b,c)=c.

Тогда правило может быть записано так: a+b>c. Увеличим обе части неравенства на величину с и разделим их на 2:

Переменной Р обозначим полупериметр треугольника:

Тогда а, b, с - стороны треугольника, если P>c, где с - наибольшая из сторон.

Во-вторых, площадь треугольника также может быть вычислена различными способами. Мы выберем формулу Герона:

Теперь метод решения поставленной задачи может быть сформулирован так. По заданным значениям переменных а, b, c вычислить полупериметр Р. Если а, b, c образуют стороны треугольника, то вычислить его площадь S и выдать результаты расчета. В противном случае, выдать сообщение о том, что а, b, с не являются сторонами треугольника.

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

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

В рассматриваемой задаче мы будем использовать следующие переменные:

а, b, с - стороны треугольника;

d - наибольшее из значений а, b, с;

Р - полупериметр; S - площадь.

Для них должны выполняться следующие условия: P>d, S>0, a>0, b>0, c>0. Все переменные будем считать вещественными.

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

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

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

Начало

1. задать (а, b, с);

2. вычислить полупериметр Р;

3. найти наибольшую из сторон а, b, с;

4. если а, b, с - стороны треугольника

4.1. то вычислить площадь S; выдать (S);

4.2. иначе выдать (а, b, с,' - не являются сторонами треугольника')

Конец.

А теперь рассмотрим более подробно пункты алгоритма.

Вычисление полупериметра Р.

Этот шаг сводится к выполнению оператора Р:= (а + b + c)/2.

Нахождение наибольшей из сторон а, b, с.

Операторы:

d:=a;

если d < b, то d:=b;

если d < с, то d:=c.

Вычисление площади S:

S:=SQRT(P*(P - a)*(P - b)*(Р - с)).

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

Построение алгоритма закончено, если, читая его, каждое действие вы можете заменить оператором языка программирования. В нашем примере для этого оказалось достаточным сделать два шага. Теперь алгоритм выглядит так:

Начало

Задать(а,b,с);

(*вычислить полупериметр Р*)

Р:=(а+b+с)/2;

{*найти наибольшую из сторон а, b, с*}

d: =а;

если d если d<с, то d:=с;

если (*а, b, с - стороны треугольника*) P>d

то {(*вычислить площадь S*)

S:=SQRT(P*(P-а)*(Р-b)*(Р-с));

выдать(S)}

иначе выдать (а, b ,с,' - не являются сторонами треугольника')

Конец.

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

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

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

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

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

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

Следуя перечисленным правилам, напишем программу решения рассматриваемой задачи:

program PLОСНАD;

{вычисление площади треугольника по трем сторонам)

var А,В,С:real; {стороны}

D:real; {большая из сторон}

Р:real; {полупериметр}

S:real; {площадь}

begin

writeln('Задайте стороны A,В,С:')

read(А,В,С);

{вычислить полупериметр}

Р:=(А + В + С)/2;

{найти наибольшую длину}

D:=A;

if D<B then D:=B;

if D<C then D:=C;

if {a,b,с - стороны треугольника} P>D

then

begin {вычислить площадь}

S:=SQRT(P*(P-A)*(P-B)*(P-C));

writeln{'ПЛОЩАДЬ:',S)

end

else writeln(A,B,С,

'- не являются сторонами треугольника')

end.

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

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

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

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

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

Протестируем нашу программу.

1. На вход подаем числа 3, 4, 5, являющиеся, как известно, сторонами треугольника с площадью 6. Что дает счет по программе? То же самое! При тестировании нужно проверять не только правильные, но и неверные и граничные ситуации. При этом следует уделять им внимания не меньше, чем работе с правильными данными. А поэтому рассмотрим и такие тесты.

2. Если (А, В, С) = (1, 1, 2), треугольник вырождается в отрезок.

3. Если (А, В, С) = (0,0,0) - это точка.

4. (А, В, С) = (1, 1, 3). Треугольник с такими сторонами построить нельзя.

5. А что, если на вход подать отрицательное число: 2, 1, -3?

6. Пусть все числа будут отрицательными: - 4, - 4, - 4.

Для тестов 2-6 в качестве результата должно быть получено сообщение: "А, В, С не являются сторонами треугольника". Далее проверим, все ли ветви алгоритма будут пройдены хотя бы по одному разу при выполнении этих тестов. Оказывается, да. Но если бы этого не случилось, пришлось бы добавлять новые примеры. Для каждого теста нужно выписывать не только входные данные, но и результаты, которые им соответствуют. Иначе, получив правдоподобные, но неверные результаты, вы можете не заметить ошибку. Ошибка обнаружится позже, и тогда для ее исправления потребуется больше усилий. Помните, чем раньше обнаружится ошибка, тем легче ее устранить. А потому тщательно изучайте итоги каждого тестового выполнения программы.

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

Прежде всего, внимательно просмотрите текст. Возможно, ошибки связаны с синтаксисом программы. Например, если при вычислении полупериметра вместо знака " / " был поставлен знак "*", ошибка такого рода, не замеченная транслятором, будет обнаружена лишь в результате просмотра.

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

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

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

Документирование. Если после проверки программы у вас не возникает сомнений по поводу правильности выдаваемых ею результатов, ее можно использовать в дальнейшем для проведения необходимых расчетов. Но, не имея описания программы, в ней будет трудно разобраться уже через некоторое время. Описание в еще большей степени потребуется тому, кто захочет воспользоваться вашей программой или усовершенствовать ее. А потому разработка программы заканчивается ее описанием, или документированием.

В состав описания входит:

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

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

Вопросы для самоконтроля

Моделирование как метод познания.

Формы представления моделей.

Формализация.

Системный подход в моделировании.

Типы информационных моделей.

Основные этапы разработки и исследования моделей на компьютере.

Исследование физических моделей.

Исследование математических моделей.

Биологические модели развития популяций.

Геоинформационные модели.

Оптимизационное моделирование в экономике.

Экспертные системы распознавания химических веществ.

Модели логических устройств.

Информационные модели управления объектами.

Наши рекомендации