Язык программирования АДА                           
1.6.97                                                                        
   Язык программирования высокого уровня Ада назван в часть Августы Ады       
Байрон, графини Лавлейс и дочери английского поэта лорда Байрона. Она была    
ассистентом, коллегой и сторонницей Чарльза Беббиджа, математика и            
изобретателя вычислительной машины, названной аналитической машиной. С помощью
Ч. Беббиджа в 1830 г. она написала практически законченную программу на       
аналитической машине для вычисления чисел Бернулли. Поэтому графиню можно     
назвать первым в мире программистом на вычислительной машине.                 
   Ада, язык, носящий имя графини, был разработан по инициативе и при         
содействии министерства обороны США. Исследования, предпринятые в начале и    
середине 70-х годов, показали, что можно получить огромную экономию средств на
программное обеспечение (около 24 млрд. долл. за период 1983-1999 гг.), если  
министерство обороны воспользуется единым языком программирования для решения 
всех своих задач вместо примерно 450 языков программирования и несовместимых  
диалектов, используемых программистами.                                       
   Результатом этого исследования стали требования к новому языку             
программирования, способному заменить большинство языков программирования,    
используемых в рамках министерства обороны США. Требования, получившие        
шутливое название "соломенный человек", постепенно детализировались с помощью 
широкого обсуждения как в США, так и за рубежом. В этот процесс были вовлечены
вооруженные силы США, зарубежные военные организации, промышленность и        
университеты. Получаемые в результате очередного шага детализации требования  
постепенно назывались "деревянными", "железными" и, наконец, "стальными".     
   Хотя побудительные мотивы создания нового языка программирования           
первоначально были чисто экономическими, на него оказало заметное влияние и   
желание иметь язык программирования, направленный на решение важных проблем   
разработки программного обеспечения. Требования к новому языку содержали такие
технические особенности, как простота и полнота языка, надежность,            
правильность и переносимость программ, простота поддержки, возможность        
разработки больших программ, программирование в реальном масштабе времени и   
обнаружение и исправление ошибок. В поддержку тенденции перевода на           
мультикомпьютеры и отказа от больших ЭВМ в требованиях также содержалось и    
параллельное программирование, т.е. возможность писать программы, компоненты  
которых могли бы выполняться параллельно на различных ЭВМ или на одной ЭВМ    
квазипараллельно. Для разработки языка, удовлетворяющего перечисленным        
требованиям, был организован международный конкурс. Семнадцать фирм подали    
свои предложения, четыре из них были отобраны как полуфиналисты. Интересно,   
что все полуфиналисты в качестве основы для своих языков взяли язык Паскаль.  
Победителем конкурса стал язык программирования, разработанный группой ученых 
под руководством Ж. Ишбиа фирмы CII Honeywell Bull. Претерпев некоторое число 
изменений, этот язык был назван Ада. Через некоторое время доработанный язык  
Ада становится стандартом ANSI; дальнейшие изменения в языке были направлены  
на его упрощение и устранение несоответствий. Язык Ада был принят как стандарт
ANSI в феврале 1983 г.                                                        
   Другим направлением работ министерства обороны США по стандартизации своего
программного обеспечения был проект аттестации компиляторов с языка Ада. Цель 
этого проекта - разработка набора стандартных тестов, которые компилятор      
должен выполнить прежде, чем он будет зафиксирован как реализующий стандарт   
языка Ада. Параллельно с этим был начат процесс разработки требований к       
окружению программ на языке Ада и к интерфейсу между программами и            
пользователями.                                                               
   Язык Ада - это современный язык программирования, содержащий такие         
возможности паскалеподобных языков, как определение типов, общие управляющие  
структуры и подпрограммы. Более того, в языке Ада собраны многие достижения   
теории языков программирования, полученные после 1970 г. Язык поддерживает    
логическую модульность, для которой данные, типы и подпрограммы - все могут   
быть пакетами. Физическая модульность достигается раздельной компиляцией. Язык
Ада поддерживает программирование в реальном масштабе времени за счет         
механизмов распараллеливания и обработки исключений. Системное                
программирование поддерживается за счет доступа к системно-зависимым          
параметрам и управлением точностью при представлении данных.                  
   Язык Ада вводит строгую дисциплину программирования, направленную на то,   
чтобы сделать программы более удобочитаемыми, надежными, переносимыми,        
модульными, эффективными и т.д. - т.е. обладающими всеми качествами хорошей   
программы. Например, программист должен объявить все объекты, использовать    
объекты в соответствии с их типами и обращаться к объектам только в           
соответствии с правилами видимости языка Ада. Пусть ранее программист         
использовал для этих целей язык, не обладающий той строгостью, которую        
предписывает язык Ада. Однако, написав несколько нетривиальных программ на    
языке Ада, программист оценит его правила, поймет, что цель ограничений языка 
Ада - это найти большее по сравнению с другими языками программирования число 
ошибок, причем раньше и автоматически, а также помочь программисту писать     
хорошие программы, не сдерживая его творчество и изобретательность.           
   Характеристики языка Ада:                                                  
зддддддддддддддддддддбдддддддддддддддддддддддддддддбддддддддддддддддддддд©    
ЁАбстракции          Ё   Переменные объектов       Ё     Да              Ё    
Ё                    Ё   Методы объектов           Ё     Да              Ё    
Ё                    Ё   Переменные классов        Ё     Нет             Ё    
Ё                    Ё   Методы классов            Ё     Нет             Ё    
цддддддддддддддддддддедддддддддддддддддддддддддддддеддддддддддддддддддддд╢    
ЁОграничение         Ё   Для переменных            Ё     Общедоступные,  Ё    
Ёдоступа             Ё                             Ё     обособленные    Ё    
Ё                    Ё   Для методов               Ё     Общедоступные,  Ё    
Ё                    Ё                             Ё     обособленные    Ё    
цддддддддддддддддддддедддддддддддддддддддддддддддддеддддддддддддддддддддд╢    
ЁМодульность         Ё   Виды модульности          Ё     Пакет           Ё    
Ё                    Ё                             Ё (Спецификация-тело) Ё    
цддддддддддддддддддддедддддддддддддддддддддддддддддеддддддддддддддддддддд╢    
ЁИерархия            Ё   Наследование              Ё     Нет             Ё    
Ё                    Ё   Обобщенные блоки          Ё     Да              Ё    
Ё                    Ё   Метаклассы                Ё     Нет             Ё    
цддддддддддддддддддддедддддддддддддддддддддддддддддеддддддддддддддддддддд╢    
ЁТипирование         Ё   Строгое типирование       Ё     Да              Ё    
Ё                    Ё   Полиморфизм               Ё     Нет             Ё    
цддддддддддддддддддддедддддддддддддддддддддддддддддеддддддддддддддддддддд╢    
ЁПараллельность      Ё   Многозадачность           Ё Да (определяется    Ё    
Ё                    Ё                             Ё     в языке         Ё    
цддддддддддддддддддддедддддддддддддддддддддддддддддеддддддддддддддддддддд╢    
ЁУстойчивость        Ё   Устойчивость объектов     Ё     Нет             Ё    
юддддддддддддддддддддадддддддддддддддддддддддддддддаддддддддддддддддддддды    
                                                                              
Н. Джехани. Язык программирования АДА.; Гради Буч. Объектно-ориентированное   
проектирование.                                                               


HyperText/CGI-HTML, v. 3.6.4 (C)1994-2000 M.Zakharov