Язык АДАРефераты >> Кибернетика >> Язык АДА
Далее представлен шаблон функции, позволяющей покомпонентно складывать два одномерных массива. Этот шаблон может быть настроен на произвольный тип, являющийся одномерным массивом, для компонентов которого определены операции присваивания и сложения ("сложение" не обязано быть арифметическим сложением).
Строки 1-6 содержат объявление настраиваемой функции, а строки 8-20 – ее тело. Содержательно, параметром настройки является произвольный одномерный регулярный тип с неуточненным индексным диапазоном (строка 4), про которого известно только, что тип компонента у него произвольный, однако для компонентов определена операция присваивания (строка 2), тип индекса – произвольный дискретный (строка 4). Поскольку нам предстоит покомпонентно складывать два массива, надо знать, что такое операция сложения для типа компонентов. Так как это произвольный тип, мы вынуждены передавать сложение для типа компонента как формальный параметр настройки (строка 5).
В теле функции мы первым делом проверяем, совпадают ли длины операндов (строка 12), иначе покомпонентное сложение не имеет смысла. Совпадение длин операндов не гарантирует совпадение индексных диапазонов, поэтому в цикле по индексному диапазону первого аргумента (строка 15) нам необходимо каждый раз вычислять индекс соответствующего компонента второго аргумента. Мы лишены возможности сделать это для типа Index, так как знаем про него только, что он дискретен, поэтому переходим от значения дискретного типа к его порядковому номеру (атрибут ‘Pos), вычисляем необходимый сдвиг для порядкового номера и возвращаемся к соответствующему значению типа Index (атрибут ‘Val).
Заметим, что параметры (настраиваемой) функции "+" Left и Right объявлены как имеющие тип Arr, индексный диапазон которого не уточнен. Однако Left и Right – это формальные параметры, на место которых при вызове (результата конкретизации) функции "+" будут подставлены конкретные массивы с известными индексными диапазонами. Мы же в теле функции "+" пользуемся атрибутами массивов (‘Range, ‘First, ‘Length), чтобы из объекта получить информацию о его индексном диапазоне.
Почему Ада?
Выбор языка для программного проекта ранее был чисто техническим вопросом. Сегодня это стало вопросом стратегической важности, имеющим далеко идущие последствия для успеха проекта. Перечислим некоторые причины, благодаря которым язык Ада был выбран для реализации программных проектов различными компаниями, либо сделан обязательным для использования в рамках тендеров.
· Желание повысить надежность разрабатываемой системы, так как программные дефекты могут иметь серьезные последствия для здоровья людей, экономики, экологии и т. п. (Ада обладает встроенными средствами обеспечения надежности).
· Желание снизить стоимость разработки и сопровождения системы.
· Наличие международных стандартов и наличие компиляторов языка практически для любой платформы.
· Преимущества дисциплинированного подхода к разработке программного обеспечения, которые становятся особенно существенными по мере увеличения объема и сложности программного обеспечения.
Ада и Си
При проведении сравнительных анализов популярных языков переломано столько копий, что сегодня эту тему часто относят к разряду "религиозных войн". Поэтому ограничимся лишь ссылкой на известную статью [2], в которой делается ряд красноречивых выводов.
4. Разработка программ на языке Ада обходится на 60% дешевле аналогичных программных проектов, реализуемых на Си.
5. Программа на языке Ада имеет в 9 раз меньше дефектов, чем программа на Си; программа на Си++ имеет еще более низкие, чем программа Си, характеристики.
6. предпочтительнее Си как для опытных, так и для неопытных программистов, а также для программистов, имеющих как максимальный, так и минимальный рейтинг в своей группе.
7. Трудоемкость изучения языка Ада не выше трудоемкости изучения Си.
8. Программы на Аде более надежны, чем программы на Си.
В качестве иллюстрации этих выводов, приведем пример разработки бортового программного обеспечения самолета C-130J в соответствии с требованиями Уровня А стандарта DO-178B [3]. При этом констатировалось качество кода, в 10 раз превышающее среднее для программного обеспечения Уровня А. Производительность труда выросла вчетверо относительно сопоставимых программных проектов.
Ада и Java
В Microsoft были вынуждены включить в лицензионные соглашения для своих операционных систем следующий пункт (www.microsoft.com/msdownload/ieplatform/ie/license.txt): "Замечание относительно поддержки языка Java . Технология Java не является устойчивой к сбоям и не предназначена . для использования в рамках управляющих систем реального времени ., в которых сбой языка Java может повлечь за собой смерть, увечье, или тяжелый урон инфраструктуре или окружающей среде. Компания Sun Microsystems, Inc. обязала компанию Microsoft разместить данное предупреждение".
Укажем также на статьи [4] и [5], демонстрирующие преимущества языка Ада над Java.
"Адские" мифы
Довольно часто с Адой связывают набор устойчивых заблуждений, препятствующих как распространению языка, так и осознанному выбору Ады в качестве языка реализации проекта.
Ада – мертвый язык, на нем сейчас никто не программирует. В действительности, Ада уверенно занимает нишу больших встроенных систем с повышенными требованиями к надежности. По сравнению с "коробочными" продуктами для Windows, такие системы не так заметны, поскольку либо существуют в одном экземпляре (какой смысл тиражировать программу, управляющую движением поездов метро), или распространяются как часть системы, в которую они встроены (бортовое программное обеспечение).
Ада – язык, предназначенный исключительно для военных применений. Ада действительно была разработана при участии Министерства обороны США, однако отсутствуют какие-либо технические, административные или иные причины, препятствующие использованию Ады для разработки гражданских систем. Количество "гражданских" проектов, основанных на этом языке, сегодня сопоставимо с количеством "военных" проектов.
Ада – слишком большой и сложный язык, для того чтобы использовать его в небольшом проекте. Объем и сложность всех современных индустриальных языков практически одинаковы, и чтобы убедиться в этом, достаточно просто сравнить объем их описаний. Этот миф восходит к началу 80-х годов, когда Аду сопоставляли с Паскалем, Фортраном 77 или Бейсиком.
Программистов, знающих Аду, мало, изучение языка с нуля требует чрезмерных усилий и времени. На самом же деле, настоящую трудность представляет отыскание специалистов, понимающих специфику встроенных систем и способных создавать качественные программы для них. Так, например, компания BAE, один из активных пользователей языка Ада, не требует от кандидатов знания этого языка; вместо этого ищутся люди, знакомые со встроенными системами и процессами создания программного обеспечения индустриального качества. После найма таких людей требуется всего две недели для обучения их языку Ада.