Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Программные средства моделирования



 

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

наличие математических функций;

точность вычислений;

обработка ошибок;

возможность пополнения библиотек;

система отображения;

система разработки интерфейса;

возможности коммуникации с другими программами.

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

Прежде чем перейти к описанию систем программирования, построенных на базе языков C/C++, следует понять разницу между языком программирования и средой разработки. Язык – это некоторый формальный способ описания задачи, решаемой машиной. Транслятор языка - это программа, которая переводит текст задачи с заданного языка на язык машины. А система программирования - это ряд программ и системных библиотек, которые призваны облегчить программисту разработку программ на этом языке. В состав систем программирования, помимо транслятора языка (иногда даже нескольких), обычно включается интегрированная среда разработки, различные системные библиотеки и т.д. Например, есть язык С++, есть множество различных реализаций компилятора этого языка, в том числе реализация от фирмы Microsoft, и есть система программирования Microsoft Visual C++, которая строится на этом компиляторе и большом количестве дополнительных библиотек и инструментальных средств.

 

Языки программирования

Язык Fortran

 

Язык Fortran (от англ. Formula Translation) – один из первых языков программирования, появившийся еще в 50-х годах. В то время было разработано множество библиотек, в том числе математических, ориентированных на этот язык. Несмотря на то, что язык оказался не слишком удобным в использовании, он довольно прочно занял свою нишу для разработки математических программ, в первую очередь для моделирования. С тех пор язык претерпел несколько редакций (последняя – в 95-м году) и существует большое множество различных версий компилятора этого языка. Среди современных реализаций для персональных компьютеров следует отметить Microsoft Visual Fortran.

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

Язык С

 

Язык С, появившийся в первой половине 70-х годов прошлого столетья в лаборатории Bell Labs компании AT&T [Керниган&Ритчи], является в настоящее время де-факто стандартом для разработки программ системного назначения малого и среднего размеров. В настоящее время реализация этого языка есть практически для всех вычислительных систем от микроконтроллеров до сверхбольших вычислительных машин. Понятие «среднего размера» весьма относительно и, как правило, соответствует проектам от 10 до 100 тысяч строк исходного текста. Под «системными» понимаются программы, предназначенные, в основном, для нужд операционной системы (в том числе и сама операционная система является системной программой). Однако этот язык вполне подходит и для разработки прикладных программ, в том числе связанных с математическими вычислениями. Изюминка языка C - в его относительной близости к вычислительной системе, что позволяет разрабатывать высокоэффективный код (с минимальными накладными расходами, а соответственно, максимальный по скорости выполнения и минимальный по расходу памяти).

Язык C обладает набором из 50 операций (как целочисленных, так и вещественных), распределённых по 15 уровням приоритетов. Среди математических операций языка собраны все операции, которые можут выполнить центральный процессор и математический сопроцессор. Часть операций применима как к целым типам данных, так и к вещественным.

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

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

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

10.1.3 Язык С++

 

Язык C++, разработанный в первой половине 80-х годов, как объектно-ориентированное (ОО) развитие языка C, Бьярном Страуструпом, занимает несколько иную нишу. В отличие от языка C, программы, скомпилированные с языка C++, обладают, как правило, немного худшей производительностью и большим объёмом исполняемого кода. Основная ниша данного языка – разработка больших (обычно прикладных) программных систем сравнительно большой группой разработчиков, распределённой в пространстве и/или времени. Основное преимущество данного языка – языковая поддержка 3-х базисных конструкций ОО программирования: инкапсуляция, полиморфизм и наследование.

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

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

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

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

Кроме того, язык C++, один из немногих, позволяет перегружать смысл своих операций для абстрактных типов данных. Таким образом, можно получить набор типов (классов), максимально приближенный к аналогичным объектам в математике, например, класс матрица или вектор. Совместное использование всех языковых конструкций позволило создать весьма эффективную, но в то же самое время очень гибкую стандартную библиотеку шаблонов (standard template library – STL), включающую все основные способы хранения данных и базовые алгоритмы обработки этих данных. Существует построенная на этой библиотеке, например, библиотека MTL (matrix template library – библиотека шаблонов матрицы), которая позволяет достаточно эффективно обрабатывать матрицы произвольной размерности с произвольным типом хранимых данных.

К сожалению, богатая история развития языка C++ привела к появлению огромного количества разночтений и, фактически, различных диалектов этого языка. Усилия консорциума разработчиков привели к тому, что в 1998 г. был утвержден стандарт этого языка. Однако далеко не все существующие компиляторы языка С++ совместимы с этим стандартом.


Поделиться:



Последнее изменение этой страницы: 2019-04-10; Просмотров: 233; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.013 с.)
Главная | Случайная страница | Обратная связь