Файл: История развития средств вычислительной техники (История языков программирования).pdf
Добавлен: 01.04.2023
Просмотров: 338
Скачиваний: 2
СОДЕРЖАНИЕ
1. История языков программирования
1.1.Характеристика языков программирования
1.2.Начало истории программирования
2. Классификация и обзор языков программирования
2.1.Процедурное программирование
2.2.Функциональное программирование
2.3.Логическое программирование
2.4.Объектно-ориентированное программирование (ООП)
2.5.Языки программирования баз данных
Паскаль (Pascal) - это один из самых популярных процедурных языков программирования, особенно для персональных компьютеров (ПК). Он был создан как учебный язык программирования в 1968—1971 годах Никлаусом Виртом в Высшей технической школе в Цюрихе (Швейцария), и получил название в честь французского философа и математика Блеза Паскаля (1623—1662 года). Цель работы Никлауса Вирта была создать язык, который
• допускал перевод программ в машинный код простым;
• имел простой синтаксис;
• компилятором строился бы на небольшом количестве базовых понятий.
Лингвистическая концепция Паскаля пропагандирует системный подход, который выражается, в частности, в расчленении больших задач на меньшие по размеру и сложности, которые легко поддаются решению. К базовым принципам языка Паскаль следует отнести:[18, 19]
• Структурное программирование. Его суть - оформлять последовательность команд как замкнутых процедур или функций и в объединении данных, которые связаны по смыслу, в сложные структуры данных. Из-за этого наглядность текста выше и его отладка проще.
• Программирование сверху вниз, когда задача разбивается на простые подзадачи, после этого каждая подзадача решается в отдельности. Затем результаты компонуются вместе, и задача, которая была поставлена, решается сверху вниз в целом.
Базой разработки языка Паскаль является Алгол-60, но в нем ужесточены некоторые требования к структуре программы и есть возможности, которые позволяют успешно применять его для создания крупных проектов, к примеру, программ-трансляторов. Pascal реализован для всех типов компьютеров, сейчас используется во многих учебных заведениях для обучения программированию, а также для создания больших реальных проектов.[1, 11]
Период с конца 60-х до начала 80-х годов ХIХ века характеризуется быстрым ростом числа различных языков программирования, которые сопровождали, как это ни парадоксально, кризис программного обеспечения. Этот кризис очень остро переживало военное ведомство США. В январе 1975 года Пентагон решил навести порядок среди бесчисленного множества трансляторов и создал комитет для разработки 1-ого универсального языка. Комитет рассмотрел на конкурсной основе множество проектов и выяснил, что ни один из существующих языков не удовлетворяет их требованиям, для окончательного рассмотрения было оставлено 2 проекта. В мае 1979 году был объявлен победитель – группа ученых во главе с Жаном Ихбиа. Победивший язык назвали АДА, в честь Ады Лавлейс, дочери великого поэта Байрона. Она в юности была увлечена идеями Чарльза Бэббиджа и помогала ему составлять описание машины, а в начале 40-х годов ХIХ века разработала первую в мире программу для вычислительной машины. Язык АДА является прямым наследником Паскаля. Язык АДА предназначен, чтобы создавать и длительное время сопровождать большие программные системы, управлять процессами в реальном масштабе времени. В этом языке четко выражена модульность его конструкций, вместе с этим обеспечивается удобство организации разнообразных связей между модулями. Существенное его достоинство заключается в возможности параллельного программирования ветвей программы, которые потом могут реализоваться на многопроцессорных компьютерах. Язык АДА очень сложен для изучения.[9]
Язык программирования С (Си) был разработан в начале 70-х годов в лаборатории Bell для реализации операционной системы UNIX и изначально не рассматривался как массовый. Он предназначался для замены Ассемблера для того, чтобы существовала возможность создавать такие же эффективные и компактные программы, и одновременно быть независимым от конкретного типа процессора. В Си присутствуют достоинства современных высокоуровневых языков в части управляющих конструкций, а также структур данных с возможностями прямого доступа к аппаратным средствам компьютера. Синтаксис языка Си обеспечивает краткость программы, его компиляторы генерируют эффективный объектный код. Самая существенная особенность Си заключается в том, что различия между операторами и выражениями нивелируются, это приближает его к функциональным языкам. К примеру, выражение может иметь побочный эффект присваивания, а также может использоваться как оператор. Нет четкого различия между функциями и процедурами, кроме того, понятие процедуры вообще не вводится. Синтаксис языка затрудняет программирование и восприятие составленных программ. В нем нет строгой типизации данных, что дает дополнительные возможности программисту, но никаким образом не способствует созданию надежных программ. Язык Си имеет большую популярность среди прикладных и системных программистов. В данный момент этот язык реализован для большинства компьютерных платформ.[15]
2.2.Функциональное программирование
А.П. Ершов определил суть функционального (или аппликативного) программирования, как «способ составления программ, в которых есть одно действие - вызов функции, единственный способ расчленения программы на части - это введение имени функции, а единственное правило композиции – это оператор суперпозиции функций. Нет ячеек памяти, нет операторов присваивания, нет циклов, и тем более, нет блок-схем и нет передачи управления».
Основа конструкцией в функциональных языках - это выражение. К выражениям относятся структурированные объекты, константы, функции, их тела и вызовы функций. Функциональный (аппликативный) язык программирования состоит из следующих элементов: [5, 20]
1)классов констант, ими могут манипулировать функции;
2)наборов базовых функций, их можно использовать без предварительного объявления;
3)правил построения новых функций из базовых;
4)правил формирования выражений на основе вызовов функций.
Программа является последовательностью описаний функций и выражений, которые нужно вычислить. Вычисление выражение осуществляется методом редукции, это означает, что выражение упрощается, пока есть возможность по следующим правилам: вызовы базовых функций заменяют соответствующими значениями; а вызовы не базовых функций заменяют их телами, в которых параметры заменены аргументами.[5]
Функциональное (аппликативное) программирование не рассматривает память как хранилище значений. Отсутствует понятие оператора присваивания, и по этой причине переменные обозначают объекты программы, что целиком соответствует понятию переменной в математике. Можно писать программы и без переменных. Практически нет различий между функциями и константами, то есть между данными и программами. В итоге, функция может быть значением вызова другой функции и может быть элементом структурированного объекта. Вызывая функцию не обязательно, чтобы число аргументов совпадало с числом параметров, которые были указаны в ее описании.
Первый такой язык был Лисп (с англ. LISP, LIStProcessing – обработка списков), который создал в 1959 году Джон Маккарти. Лисп ориентирован на структуру данных в виде списка и с его помощью можно добиться эффективной обработки больших объемов текстовой информации. Существенной чертой языка является унификация структур данных и программных структур: все выражения записываются в форме списков.[17]
2.3.Логическое программирование
После создания языка искусственного интеллекта Пролог (с англ. PROLOG, ProgramminginLOGic – программирование в терминах логики), открылась новая область – реляционное или логическое программирование.
Главное понятие в логическом программировании - это отношение. Программа является совокупностью определений отношений между объектами и целью. Процесс выполнения программы определяется, как процесс общезначимости логической формулы, которая построена из программы по правилам, которые установлены семантикой используемого языка. Результат вычисления - это побочный продукт этого процесса. В логическом программировании необходимо лишь специфицировать факты, на которых основан алгоритм, а не определять последовательность шагов, требующих выполнения. Это свидетельствует о декларативности языка логического программирования. Логические программы не имеют большое быстродействие, потому что вычисления осуществляются методом проб и ошибок, и поиском с возвратами к предыдущим шагам.[15, 20]
Программа на языке PROLOG, в основу которой легла математическая модель теории исчисления предикатов, строится из последовательности правил и фактов, потом формулируется утверждение, которое PROLOG будет пытаться доказать при помощи введенных правил. Пользователь только описывает структуру задачи, а внутренний механизм PROLOG сам ищет решение с помощью метода поиска и сопоставления.[16]
2.4.Объектно-ориентированное программирование (ООП)
Родоначальником этого направления явился язык Смолток (Smalltalk), изначально предназначенный, чтобы реализовать функции машинной графики. В 1970 году началась работа над языком в исследовательской лаборатории XEROX (США), и закончилась в 1980 году окончательным вариантом интерпретатора Smalltalk-80. Этот язык особенный тем, что его синтаксис очень компактен и основывается только на понятии объекта. В Smalltalk отсутствуют данные или операторы, все, что входит в Smalltalk, является объектами, а объекты общаются друг с другом только с помощью сообщений. Сейчас компанией IBM активно развивается версия Visua lAgefor Smalltalk.[20]
Базой объектно-ориентированного программирования (ООП) является понятие объект (Рисунок 3). Сущность объекта можно выразить следующей формулой "объект = данные + процедуры". Каждый объект содержит некоторую структуру данных и доступные лишь ему процедуры (методы) обработки этих данных. Следуя этой методологии, можно создать свой собственный абстрактный тип и отобразить проблемную область в эту созданную абстракцию вместо традиционного ее отображения в предопределенные управляющие структуры и структуры данных языка программирования. Объединение данных и свойственных им процедур обработки в одном объекте называется инкапсуляцией и характерна ООП.[12]
Рисунок 3 – Принципы ООП
Другим базовым понятием ООП является класс. Класс представляет собой шаблон, на основе которого может быть создан конкретный программный объект, он определяет методы и свойства объекта, которые принадлежат этому классу, а значит любой объект, который создан будет экземпляром класса. Класс обеспечивает скрытие данных, гарантирует их инициализацию, неявное преобразование типов для типов, которые определены пользователем, управление памятью, контролируемое пользователем, и механизмы перегрузки операций.
ООП является более естественным, потому что дает возможность выбрать уже имеющиеся или создать новые объекты и затем организовать взаимодействия между ними. Значит, если сравнивать объектно-ориентированные языки с процедурными, эти языки более высокого уровня.[5]
Создавая новые объекты их свойства можно наследовать от объектов-предков или добавлять. Наследование предполагает создание новых классов на базе уже существующих, что предоставляет классу-потомку возможность иметь (наследовать) все свойства класса-родителя. (Рисунок 4).
Рисунок 4 – Виды иерархии классов
Во время работы с объектами допускается полиморфизм, который заключается в возможности использовать методы с одинаковыми именами, чтобы обрабатывать данные разных типов. Полиморфизм (от греч. «многоликость») гласит, что рожденные объекты обладают следующей информацией: они знают, какие методы они должны использовать в зависимости от того, в каком месте цепочки наследования они находятся. Другим базовым принципом ООП является модульность. Она означает, что объекты заключают в себе полностью все определения своих характеристик, никакие определения свойств и методов объекта не могут быть расположены вне его, это дает возможность свободно копировать и внедрять один объект в другие объекты.
К самым современным объектно-ориентированным языкам программирования относятся C++ и Java.[16]
Язык C++ был разработан в начале 80-х годов прошлого века Бьярном Страуструпом в лаборатории Bell корпорации AT&T. Он создал компактную компилирующую систему, в основе которой лежал язык С, дополненный элементами языков Simula-67, BCPL и Алгол-68. Более ранние версии языка назывались «С с классами». В июле 1983 года C++ первый раз был использован за пределами исследовательской группы автора, но в то время еще множество особенностей языка были не придуманы. К 1990 году была выпущена 3 версия языка C++, которая была стандартизирована американским государственным комитетом стандартов ANSI. Сотрудник корпорации Sun Д. Гослинг в 1990 году на основе расширения C++ разработал объектно-ориентированный язык Oak, главным достоинством этого языка было обеспечение сетевого взаимодействия различных по типу устройств. Новая версия языка, интегрируемая в Internet, стала называться Java. Java распространилась в Internet с января 1995 года.
По определению автора, Java является простым объектно-ориентированным и архитектурно-нейтральным языком интерпретирующего типа, который обеспечивает надежность, переносимость и безопасность, обладает высокой производительностью, динамичностью и много поточностью.[8, 20]