Файл: «Классификация языков программирования высокого уровня» _.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 17.06.2023

Просмотров: 161

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Еще одним важным преимуществом реализации языков функционального программирования является автоматизированное динамическое распределение памяти компьютера для хранения данных. При этом программист избавляется от рутинной обязанности контролировать данные, а при необходимости может запустить функцию «сборки мусора» – очистки памяти от тех данных, которые больше не потребуются программе (обычно этот процесс периодически инициируется компьютером).

Таким образом, при создании программ на функциональных языках программист сосредотачивается на области исследований (предметной области) и в меньшей степени заботится о рутинных операциях (обеспечении правильного с точки зрения компьютера представления данных, «сборке мусора» и т.д.) [10, с.8].

Поскольку функция является естественным формализмом для языков функционального программирования, реализация различных аспектов программирования, связанных с функциями, существенно упрощается. В частности, интуитивно прозрачным становится написание рекурсивных функций, т.е. функций, вызывающих самих себя в качестве аргумента. Кроме того, естественной становится и реализация обработки рекурсивных структур данных (например, списков – базовых элементов, скажем, для семейства языков LISP) [21].

Благодаря реализации механизма сопоставления с образцом, такие языки как ML и Haskell весьма хорошо применимы для символьной обработки.

Естественно, языки функционального программирования не лишены недостатков. Часто к ним относят нелинейную структуру программы и относительно невысокую эффективность реализации. Однако, первый недостаток достаточно субъективен, а второй успешно преодолен современными реализациями, в частности, рядом последних трансляторов языка SML, включая и компилятор для среды Microsoft .NET [21].

3.2. Логические языки программирования

В 70-х г.г. возникла еще одна ветвь языков декларативного программирования, связанная с проектами в области искусственного интеллекта, а именно, языки логического программирования. Иногда к таким языкам применяют термин «языки пятого поколения» (однако это не является общепринятой точкой зрения).

В качестве примеров языков логического программирования можно привести Prolog и др. Prolog (PROgramming in LOGic) – язык программирования высокого уровня, предназначенный для разработки систем и программ искусственного интеллекта. Был разработан в 1971 году в университет Марселя [8, с.406].


Время появления отдельных логических языков показано на рис.6.

Рисунок 6 – Логические языки программирования [20]

Согласно логическому подходу к программированию, программа представляет собой совокупность правил или логических высказываний. Кроме того, в программе допустимы логические причинно-следственные связи, в частности, на основе операции импликации [15].

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

Таким образом, языки логического программирования базируются на классической логике и применимы для систем логического вывода, в частности, для так называемых экспертных систем. На языках логического программирования естественно формализуется логика поведения, и они применимы для описаний правил принятия решений, например, в системах, ориентированных на поддержку бизнеса [1, с.31].

Важным преимуществом подхода является достаточно высокий уровень машинной независимости, а также возможность откатов – возвращения к предыдущей подцели при отрицательном результате анализа одного из вариантов в процессе поиска решения (скажем, очередного хода при игре в шахматы), что избавляет от необходимости поиска решения полным перебором вариантов и увеличивает эффективность реализации [21].

Одним из недостатков логического подхода в концептуальном плане является специфичность класса решаемых задач. Другой недостаток практического характера состоит в сложности эффективной реализации для принятия решений в реальном времени, скажем, для систем жизнеобеспечения.

Нелинейность структуры программы является общей особенностью декларативного подхода и, строго говоря, является оригинальной характеристикой, а не объективным недостатком.

3.3. Объектно-ориентированные языки программирования


Объектно-ориентированные языки – это языки программирования, поддерживающие концепцию объектно-ориентированного программирования (ООП) [6, с.28].

В настоящее время объектно-ориентированный подход занимает в программировании особое место. Вместо проблемы разбиения задачи на функции, в объектно-ориентированном программировании задача представляется в виде совокупности объектов. Набор действий, или операций, применимых к объекту, определяется его классом, или типом. Кроме этого, объект каждого класса определяется характерным для него набором свойств, или атрибутов.

Концепция объектно-ориентированного программирования складывается из трёх ключевых понятий: абстракция данных, наследование и полиформизм [10, с.9].

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

В повседневной жизни мы часто сталкиваемся с разбиением классов на подклассы. В программировании класс также может породить множество подклассов. Класс, порождающий другие классы, называется базовым. Порождённые им классы наследуют его свойства, но могут обладать и собственными. Такие классы называются производными. А сам процесс выделения производных классов из базового – наследованием [10, с.10].

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

Первым объектно-ориентированным языком программирования в истории является Симула. Он был разработан в конце 1960-х годов сотрудниками норвежского вычислительного центра (Осло) Кристеном Нюгордом и Оле-Йоханом Далем с целью моделирования сложных систем, что отразилось на его названии (simulation - моделирование). Наиболее известна версия Симула-67. Язык является расширением Алгола-60. Симула в значительной степени опередила свое время, программисты 1960-х годов оказались не готовы воспринять ее ценности, она не выдержала конкуренции прежде всего с Фортраном [22].

Smalltalk («смо́лток», в переводе - светская беседа) - объектно-ориентированный язык программирования с динамической типизацией, разработанный в лаборатории Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером и другими в 1970-х годах. Язык был представлен как стандартная версия Smalltalk-80. Smalltalk представляет собой воплощение идей ООП в чистом виде. Решение принимается с помощью посылки сообщения ifTrue: логическому объекту, управление переходит к указанному фрагменту текста, если значение истинно. В языке всего три базовых конструкции: посылка сообщения объекту, присваивание объекта переменной, возвращение объекта из метода. Smalltalk оказал большое влияние на развитие многих современных языков программирования [22].


Наиболее современные и активно используемые в индустрии информационных технологий языки - С++, C#, Java - являются объектно-ориентированными. В мире ежегодно проводятся сотни специализированных конференций, посвященных объектно-ориентированному программированию (ООП) [13, с.47].

Средства ООП добавляются не только в императивные языки (так из Си получились С++ и Objective C), но и, например, в функциональные (Лисп - CLOS, Common Lisp Object System). Провозглашается, что объектно-ориентированный подход позволяет создавать более легко сопровождаемые и модифицируемые сложные программные системы [13, с.47].

Среди других примеров можно назвать Visual Basic, Eiffel, Oberon, Ruby.

Объектно-ориентированные языки можно разделить на три группы (рис. 7).

  1. Чистые языки, в наиболее классическом виде поддерживающие объектно-ориентированную методологию.
  2. Гибридные языки, которые появились в результате внедрения объектно-ориентированных конструкций в популярный императивный язык программирования.
  3. Урезанные языки, которые появились в результате удаления из гибридных языков наиболее опасных и ненужных с объектно-ориентированной точки зрения конструкций [20].

Рисунок 7 – Объектно-ориентированные языки программирования [20]

Развитием событийно управляемой концепции объектно-ориентированного подхода стало появление в 90-х г.г. целого класса языков программирования, которые получили название языков сценариев или скриптов. Под сценарием подразумевается некий набор действий, исполняемых операционной системой, браузером или иным подобным программным компонентом. При этом скрипт (программа на языке сценариев) интерпретируется соответствующим компонентом. Типичный пример – язык командной строки, с помощью которого можно задать операции над файлами в указанной папке [21].

К этой группе относят, например, такие популярные языки, как VBScript, PowerScript, LotusScript, JavaScript, Perl, PHP, BASH, и другие.

Как уже говорилось, в настоящее время объектно-ориентированное программирование является магистральным путем развития в индустрии информационных технологий. Апологеты ООП говорят прежде всего о следующих достоинствах объектно-ориентированных систем:

  • возможности повторного использования;
  • упрощение создания сложных систем за счет использования абстракции;
  • удобство сопровождения и модификации объектно-ориентированных программ [13, с.53].

У ООП есть и ряд довольно авторитетных критиков, которые, в частности, обращают внимание на следующие обстоятельства:


  • внедрение ООП требует дополнительных затрат на обучение программистов и накладных расходов при создании программ— от 12 до 75 % времени;
  • наследование в моделировании не существует;
  • инкапсуляция и повторное использование возможны и без ООП при правильной модульной организации программной системы [13, с.53].

В то же время ряд наиболее сложных и успешно используемых программных систем созданы именно в рамках объектно-ориентированного подхода, его применяют такие гиганты индустрии, как Microsoft, IBM, Oracle.

Итак, в данной главе рассмотрены основные непроцедурные языки программирования. В языках функционального программирования вычисления в основном производятся путём применения функций к заданному набору данных. Согласно логическому подходу к программированию, программа представляет собой совокупность правил или логических высказываний. Вместо проблемы разбиения задачи на функции, в объектно-ориентированном программировании задача представляется в виде совокупности объектов, объект каждого класса определяется характерным для него набором свойств, или атрибутов.

ЗАКЛЮЧЕНИЕ

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

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

Язык высокого уровня - язык программирования, средства которого обеспечивают описание задачи в наглядном, легко воспринимаемом виде, удобном для программиста. Он не зависит от внутренних машинных кодов ЭВМ любого типа, поэтому программы, написанные на языках высокого уровня, требуют перевода в машинные коды программами транслятора либо интерпретатора. К языкам высокого уровня относят Фортран, ПЛ/1 , Бейсик, Паскаль, Си, Ада и др.