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


Краткая история языков программирования



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

Одним из первых и наиболее удачных языков такого рода стал Фортран (Formula Translation), разработанный в фирме IBM в 1954-1957 г.г. группой разработчиков во главе с Джоном Бэкусом. Языки высокого уровня вначале были встречены с недоверием. Считалось, что они не позволят добиться той эффективности выполнения программ, которую давали машинные коды. FORTRAN показал, что это не так. Язык Фортран не только просуществовал до наших дней, но и достаточно распространен (Visual Fortran). Среди причин такого долголетия можно отметить простую структуру как самого Фортрана, так и предназначенных для него трансляторов, а также большой объем библиотек исходных текстов уже решенных задач.

Вскоре после создания Фортрана появился (в Европе) язык Алгол (Algorithmic Language), созданный на основе широкого международного сотрудничества. В 1960 г. было опубликовано официальное сообщение об алгоритмическом языке, названном Алгол-60. Алгол создавался после разработки и практического применения Фортрана, поэтому характеризуется как введением новых конструкций, так и обобщением понятий, имеющихся в Фортране. На Алголе стали публиковаться описания алгоритмов (Библиотека алгоритмов - у нас в стране).

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

Кобол - экономические расчеты, Снобол - обработка строк, Симула-67 - моделирование

отвечающие нуждам специфичных направлений науки и техники.

Десятилетняя история развития языка программирования привела к появлению т.н. универсальных языков программирования:

- ALGOL 68 (оказался излишне громоздким и не очень удобным)

- PL/1 (Programming Language/1 — язык программирования один) создан фирмой IBM в 1964 г. Он основывался (взял основные черты) на языках Фортран, Кобол, Алгола и других языков. Был очень популярен на больших ЭВМ (до появления ПЭВМ) во всем мире (и в СССР тоже).

В 1971 г. Никлаусом Виртом был предложен алгоритмический язык Паскаль (Pascal), который предназначался для обучения студентов основам науки о вычислительных машинах, системах и информацион­ных технологиях. Язык Паскаль является преемником Алгола-60, он имеет конструкции, аналогичные существующим в PL/1 и Алголе-68, однако Паскаль более лаконичен. Язык Паскаль способствовал внедрению структурного программирования как современной технологии программирования, основанной на пошаговом построении программы, состоящей из небольших четко определенных процедур.

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

Язык Оберон был разработан Н. Виртом в 1987 г. Он представляет собой существенно упрощенный синтаксически вариант Модулы-2, в который добавлены расширяемые записи — основной механизм ООП. Язык необычайно прост, но при этом сохраняет универсальность и в функциональном отношении не уступает другим языкам. В 1992 г. Н. Виртом были приняты расширения Оберона, предложенные Ханспетером Мёссенбёком. В язык введены аналоги виртуальных методов в других языках. Новая версия получила название Оберон-2. Удивительно, но Оберон-2 оказался проще Оберона, расширением которого является.

В свою очередь популярность Паскаля еще более возросла с массовым распространением персональных компьюте­ров и выпуском фирмой Borland среды разра­ботки Turbo Pascal. Компилятор Турбо-Паскаль, разработанный Андерсом Хейльсбергом, был выпущен в продажу фирмой Borland в 1983 г. (версия 1.0). Эта версия уже содержала расширения языка, хотя и небольшие. В последующих выпусках расширений становилось все больше: встроенная графика, модули, средства объектно-ориентированного программирования (ООП) и т.д. Начиная с версии 7.0, язык стал называться Borland Паскаль.

Borland Delphi 1.0 (1995) - 16-разрядная

Borland Delphi 2.0 (1996) - 32-разрядная

Borland Delphi 7 (2001) - самая популярная

CodeGear Delphi 2007 DELPHI

Embarcadero Delphi 2009 - 2014 (XE4)

 

Бесплатные варианты - Lazarus (на базе Free

Pascal) и Turbo Delphi (2006 г. - появилась, 2008 г. - закрыта).

 

Kylix 3 (2002 г.) - последняя

«Наследником» Turbo Pascal стала среда программирования (и язык) Delphi — систе­ма быстрой разработки приложений для Microsoft Windows (RAD или Rapid Application Development) — и Kylix — система быстрой разработки приложений для X Window System в операционной системе UNIX. Развитием Паскаля стала в Borland Pascal и Delphi объектно-ориентированная версия Паскаля - Объектный Паскаль (1984 г.). Объектный Паскаль (в Delhi - Object Pascal 2.0) по сравнению со стандартным Паскалем содержит очень много синтаксических расширений. В результате из простого и изящного Паскаля получился язык, приближающийся по сложности к языку Ада.

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

Ada C

 

 

Pascal Modula (Modula-2) C++

       
   
 


Oberon (Oberon-2 и 3) Java C#

Turbo Pascal (Borland Pascal)

Object Pascal (Delphi)

Почти одновременно с языком Pascal появился язык С, предложенный Денисом Ритчи в начале 70-х годов. Он задумывался как язык сравнительно низкого уровня в том смысле, что язык C достаточно полно отражает возможности современных компьютеров, позволяя писать весьма эффективные программы, не прибегая к языкам ассемблера. Он использовался для написания значительной части ОС Unix. Используется как язык системного программирования и как язык программирования вычислений. Не накладывая на программиста особых ограничений (в отличие от Паскаля), он дает возможность для разнообразных трюков, чем тоже многим импонирует.

На ос­нове языка С был создан объектно-ориентированный язык C++ (1986 г.). Объектно-ориентированный язык C++ предложил Бьярн Страуструп (жаргон - Дохлый Страус) с первоначальным названием «Си с классами». Название отражает тот факт, что C++ является надмножеством языка C. Язык C++, по ряду оценок, сложнее C вдвое. В настоящее время это, без преувеличения, язык номер один в мире для профессиональных программистов, поскольку он перенял преимущества и популярность C и добавил мощные средства написания объектно-ориентированных программ. Его реализации поддерживаются на всех аппаратно-программных платформах, в отличие от Паскаля, который широко распространен лишь на платформе IBM PC.

Язык С++ в свою очередь, дал жизнь популярному и широко используемому объектно-ориентированному языку Java (в английском произношении — Джава), предложенному Джеймсом Гослингом (фирма Sun Microsystems - ее купила Oracle) в 1995 г. Основная особенность Java — межплатформенная переносимость приложений, благодаря чему язык широко используется для написания приложений для Internet (для Web-программирования). Java — очень сложный синтаксически язык. Его официальное описание — 700-страничный документ — насыщен многословными и громоздкими определениями. Несмотря на эту сложность, в Java есть всего две существенные вещи, которых нет, например, в Обероне: встроенная многопоточность и обработка исключений.

Ответом фирмы Microsoft на рост популярности Java стал язык C# (Си Шарп) (2000 г.).

 

6. Подходы к разработке программ (парадигмы программирования)

Восходящий подход

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

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

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

 

 
 

 


… … … …

 
 

 

 


базовые средства

 

6.2 Нисходящий подход.

           
 
Постановка1
 
Постановка2  
     
ПостановкаN  
 
 
 
Программа1
 
Программа2  
 
 
Исполнтель1
 
Исполнтель2  


………

 
 
Программа N  


………

           
 
     
 
 

 


………

 

Стадия 1 Стадия 2 ….. Стадия N

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

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

Достоинства данного подхода:

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

Недостатки этого подхода:

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

2) ошибки, допущенные на начальных этапах, будут дублироваться на всех последующих этапах

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


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-07-12; Просмотров: 883; Нарушение авторского права страницы


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