Файл: Классификация языков программирования высокого уровня.pdf
Добавлен: 28.03.2023
Просмотров: 198
Скачиваний: 2
Языки логического программирования характеризуются:
- высоким уровнем;
- строгой ориентацией на символьные вычисления;
- возможностью инверсных вычислений, то есть переменные в процедурах не делятся на входные и выходные;
- возможной логической неполнотой, поскольку зачастую невозможно выразить в программе определенные логические соотношения, а также невозможно получить из программы все выводы правильные.
1.2.3. Объектно-ориентированные языки
Концепция объектно-ориентированного программирования (object- oriented language) подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования, где отдельно определённые структуры данных передаются в процедуры (функции) в качестве параметров. Таким образом, объектно-ориентированная программа состоит из объектов – отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определённые интерфейсы.
Объектно-ориентированный язык программирования должен обладать следующими свойствами:
- абстракции – формальное о качествах или свойствах предмета путем мысленного удаления некоторых частностей или материальных объектов;
- инкапсуляции – механизма, связывающего вместе код и данные, которыми он манипулирует, и защищающего их от внешних помех и некорректного использования;
- наследования – процесса, с помощью которого один объект приобретает свойства другого, т.е. поддерживается иерархической классификации;
- полиморфизма – свойства, позволяющего использовать один и тот же интерфейс для общего класса действий.
Элементы объектно-ориентированного программирования (ООП) появились в начале 70-х годов в языке моделирования Simula, затем получили свое развитие, и в настоящее время ООП принадлежит к числу ведущих технологий программирования.
1.2.4. Специализированные языки
Специализированные языки (special language) - языки программирования, ориентированные на решение определенного круга задач. Этих задах много, рассмотрим некоторые из них.
Классификация языков программирования по типам задач:
- Задачи искусственного интеллекта (Lisp, Prolog, Planner, QA4, FRL, KRL, QLisp);
- Задачи вычислительной математики и физики (Occam, PFOR, Glypnir, Actus, Cobol, Алгол, Фортран);
- Разработка интерфейса (Forth, C, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java);
- Разработка программ-оболочек, разработка систем (Forth, C, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java, РПГ);
- Задачи вычислительного характера (Algol, Fortran, Cobol, Ada, PL/1, Basic, Pascal);
- Оформление документов, обработка больших текстовых файлов, организация виртуальных трехмерных интерфейсов в Интернете (HTML, Perl, PHP, Tcl/Tk, VRML, XML, PL/SCL);
- Языки программирования баз данных. (SQL, dBase II, FoxPro, Clipper);
Кроме того, существуют гибридные (комбинированные) языки (hibrid language) - языки программирования, использующие также и средства других языков.
2. Поколения языков программирования
Языки программирования по своим возможностям и времени создания принято делить на несколько поколений (Generation Language, GL). Каждое из последующих поколений по своей функциональной мощности качественно отличается от предыдущего. К сегодняшнему дню насчитывается пять поколений ЯП.
В первое поколение (1GL) входят языки, созданные в 40-50 гг., когда компьютеры только появились на свет. В то время программы писались в машинных кодах, то есть каждая компьютерная команда вместе с ее операндами вводилась в ЭВМ в двоичном виде. Это требовало огромных усилий по набору цифровых текстов и приводило к множеству трудноуловимых ошибок. Ситуация качественно изменилась в середине 50-х годов, когда был написан первый ассемблер. Хотя этот ассемблер был неполноценным в сегодняшнем понимании, но он позволял задавать названия команд в символическом виде и указывать числа не только в двоичном, но и в десятичном или шестнадцатеричном формате, что существенно облегчало работу программистов.
Языки первого поколения продолжают использоваться и сегодня, хотя в значительно меньшем объеме. Чаще всего приходится писать программы в машинных кодах для новых микропроцессоров, для которых еще не разработаны компиляторы, поддерживающие требуемый набор команд.
Расцвет второго поколения языков программирования (2GL) пришелся на конец 50-х - начало 60-х годов. Был создан символический ассемблер, позволявший писать программы без привязки к конкретным адресам памяти. В него было введено понятие переменной, и он, по сути, стал первым настоящим (хоть и машинно-ориентированным) языком программирования со своим компилятором. Скорость создания и эффективность программ резко возросли. Ассемблеры активно применяются в настоящее время, как правило, для создания программ, максимально использующих возможности аппаратуры - различных драйверов, модулей состыковки с нестандартным оборудованием и т.д.
Третье поколение ЯП (3GL) принято относить к 60-м годам. В это время родились языки, которые называют универсальными языками высокого уровня, с их помощью можно решать задачи из любых областей. Это общеизвестные Fortran, Cobol, Algol и др. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций позволили резко повысить производительность труда программистов. Кроме того, понятная большинству пользователей процедурная идеология этих языков позволила привлечь к написанию небольших программ (как правило, расчетного или учетного характера), большое количество специалистов из некомпьютерных областей.
Подавляющее большинство языков 3GL успешно применяется и сегодня. Современные компиляторы с интегрированными средами разработки предоставляют очень удобные средства поддержки процесса создания программ. Практически все современные коммерческие продукты, рассчитанные на массовый рынок, написаны на языках 3-го поколения.
С начала 70-х годов по настоящее время тянется период языков четвертого поколения (4GL). Несмотря на рождение новых технологий (ООП, визуальное программирование, CASE-методологии, системный анализ), процесс создания больших программных комплексов оказался очень трудоемкой задачей, так как для реализации крупных проектов требовался более глобальный подход к решаемым задачам, чем предлагали имевшиеся средства разработки. Языки 4GL частично снимали эту проблему. Целью их создания было в первую очередь стремление к увеличению скорости разработки проектов, снижение числа ошибок и повышение общей надежности работы больших программных комплексов, возможность быстрого и легкого внесения изменений в готовые проекты. А также упрощение самих языков для конечного пользователя, активное внедрение технологий визуальной разработки и т. д. Все средства разработки 4-го поколения имеют мощные интегрированные оболочки и обладают простым и удобным пользовательским интерфейсом. Они чаще всего используются для проектирования баз данных и работы с ними (встроенные языки СУБД), что объясняется возможностью формализации всех понятий, используемых при построении реляционных баз данных. Как правило, в эти языки встраиваются мощные примитивы, позволяющие одним оператором описать такую функциональность, для реализации которой на языках младших поколений потребовалось бы написать тысячи строк кода.
Однако пользователям, использующим языки 4GL для создания законченных приложений, по-прежнему необходимо кодировать программу вручную, используя обычный процесс последовательного ввода команд. При этом сохраняется главный недостаток языков предыдущих поколений. Он заключается в том, что все они в значительной степени ориентированы на чуждую человеческому мышлению чисто компьютерную идеологию (работа с памятью, переменными, базами данных, последовательностями абстрактных операторов и т. п.), что требует от людей хорошего понимания принципов функционирования компьютера и операционных систем.
Рождение языков пятого поколения относится к настоящему времени. Довольно неожиданно вокруг самого названия 5GL разгорелись жаркие споры. Возникло несколько программистских "школ", представители, каждой из которых, имеют свое мнение о том, какие средства разработки считать языками 5-го поколения, а какие нет. Например, на страницах лондонского журнала SURPRISE (Surveys and Presentations in Information Systems Engineering), выпускаемого при поддержке английских министерств по электронике и вычислительной технике, рассматривают средства разработки 5-го поколения в более широком аспекте, чем это принято делать в отношении обычных языков программирования. Они считают, что к системам 5GL можно отнести не только новые мощные языки, но и системы создания программ, ориентированные на непрограммиста. Подобные системы отличаются стремлением предоставить конечному пользователю-неспециалисту богатые возможности создания прикладных программ с помощью визуальных средств разработки без знания программирования. Главная идея, которая закладывается в эти системы 5GL - возможность компьютерного интерактивного или полностью автоматического преобразования инструкций, вводимых в систему наиболее удобными человеку методами в максимально наглядном виде, в текст на универсальных языках программирования, описывающий готовую программу.
Однако большая группа специалистов считает, что языки 5-го поколения являются именно языками программирования, требующими от разработчика соответствующей квалификации и умения составлять программы вручную. Сторонники этого мнения под языками 5GL понимают специализированные языки, оперирующие не абстрактными переменными, а понятиями своей предметной области, например, бухгалтерскими счетами или ферзями и пешками. Это, как правило, узкоспециализированные языки, предоставляющие программисту мощные высокоуровневые возможности обработки информации из конкретной области знаний. К языкам 5-го поколения относят также интегрированные с базами знаний и экспертными системами программные комплексы с собственными языками программирования. Типичный пример - созданная в Австралии самообучающаяся нейронная сеть "LISA" с встроенным языком описания фактов, сущностей и взаимосвязей между ними, на торговой марке которой красуется "лейбл" 5GL.
Несмотря на внешнюю противоположность определений языков 5GL, для реализации конкретных продуктов, подпадающих под то или иное определение, используются достижения одних и тех же компьютерных областей, что связано в обоих случаях со стремлением предоставить программисту средства разработки, использующие наиболее естественные для человеческого мышления понятия.
Пока сложно сказать, насколько успешной окажется тенденция стремления к полной и недостижимой универсальности. На практике с помощью систем 5GL этого направления пока удавалось создать небольшие и логически простые приложения, которые при реализации на языках 3-го поколения потребовали бы не более 10 000 исходных строк кода. При попытках разработки сложных программ возникает проблема, типичная для более старых языков — необходимость отладки, что требует от пользователя высокой квалификации.
Языки 5GL, ориентированные на конкретные области применения, уже в ближайшее время могут завоевать самую широкую популярность. Наиболее вероятно это для продуктов, позволяющих создавать приложения для работы с базами данных, области информатики, наиболее успешно поддающейся формализации.
3. История развития основных языков программирования
3.1. С чего все начиналось
Давно, когда еще не было современных языков программирования, программисты имели дело непосредственно с машинным кодом. Естественно, такие люди очень ценились, и к ним предъявлялись огромные требования. Но все-таки программы того времени были достаточно простые из-за ряда причин, таких, как сложность машинного кода, его отладки и, конечно, самой примитивности вычислительных машин. Первым шагом в компьютерной цивилизации был переход к Ассемблеру.
3.2. Assembler
Может показаться, что это событие не было из ряда вон выходящим: как были машинные коды, так и остались. Однако это не так. Да, программирование в машинных кодах осталось, но она стало символическим кодированием машинных команд. Это был огромный шаг вперед, теперь программисту вовсе не нужно было разбираться в программировании команд на аппаратном уровне. В программировании на Ассемблере стало возможным использование меток, что облегчало в значительной мере отладку программ. Появилась возможность разработки целой серии вычислительных машин с одинаковой или сходной системой команд, что можно назвать первым подобием переносимости кода. Ассемблер нес в себе еще одну революционность для программирования: появилось два представления программ на нем: в машинных кодах и в чистом, откомпилированном виде. Но, по мере развития Ассемблера, его постоянного усложнения, дизассемблирование, т.е. перевод из одного представления программы в другой, становилось все более трудным делом. Надо отметить, что в итоге автоматическое дизассемблирование стало невозможным - для этой цели стали появляться специальные программы-дизассемблеры.
Дальнейшее развитие языков программирования имеет очень сложную структуру, все элементы которой взаимосвязаны между собой. Схематично эта связь изображена на рисунке 1.
Рисунок 1. Эволюция языков программирования.
3.3. Lisp
С 50-х годов специалисты по ИИ (ИИ - искусственный интеллект) искали язык, пригодный для манипулирования понятиями, выраженными словами и фразами на естественном языке. Первым результатом этих поисков явилось семейство языков под названием IPL, от (Information Processing Languages — языки обработки информации). Оно было создано пионером ИИ Алленом Ньюэллом и его сотрудниками. Вначале работа велась в «Рэнд корпорейшн», а затем в Технологическом институте Карнеги (позднее Карнеги—Меллона) в Питтсбурге, бастионе исследований по ИИ.