Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л01_Введение.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
83.97 Кб
Скачать

2 Виды языков программирования.

Язык программирования (алгоритмический язык) — набор правил, опреде­ляющих, какие последовательности символов составляют программу (син­таксические правила) и какие вычисления описывает программа (семанти­ческие правила).

Основные черты языков программирования:

Язык обладает характеристиками, содержит абстракции, поддерживает методологию программирования, принадлежит к определенному семейству языков, может быть специализированным для некоторой предметной области.

Основные принципы построения языков программирования:

Принцип абстрагирования:

Абстрагирование данных(скрытые внутренние части);

Абстракция управления(базовые конструкции);

Абстракция модульности(независимые программные единицы).

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

Уровень языка — характеризуется сложностью задач, решаемых с по­мощью этого языка. Программирование представляет собой ото­бражение в программах объектов, понятий и явлений предметной области за­дачи. Чем более адекватно можно выполнить это отображение, тем выше уро­вень языка программирования. А отображение будет выполнено тем лучше, чем богаче возможности типообразования языка программирования.

Мощность языка — характеризуется количеством и многообразием задач, алгоритмы решения которых можно записать, используя этот язык. Чем выше уровень языка, тем ниже его мощность и наоборот.

Концептуальная целостность — характеризуется свойствами совокупности понятий, служащих для описания этого языка и включает три взаимосвя­занных аспекта.

Экономия понятий — язык должен достигать своей максимальной мощности минимальным количеством понятий.

Ортогональность понятий — между понятиями не должно быть взаим­ного влияния. Если понятие используется в различных контекстах, то правило его использования должно быть одним и тем же. К сожалению, даже такие языки, как Pascal, допускают не ортогональные конст­рукции. Например, пользователь может определить процедуры только с фиксированным числом параметров, однако некоторые стандартные процедуры (например, writeln()) могут быть вызваны с переменным числом параметров.

Единообразие понятий – требование согласованного единого подхода к описанию и использованию всех понятий.

Существует большое количество других характеристик.

Надежность — язык должен обеспечивать минимум ошибок при написа­нии программ. Более того, язык должен быть таким, чтобы неправильные программы было трудно писать.

Удобочитаемость — легкость восприятия программ человеком. Это харак­теристика важна при коллективной работе, когда несколько человек ра­ботают с одними и теми же текстами программ.

Полнота — характеризует способность описать класс задач в некоторой предметной области.

Гибкость — характеризует легкость выражения необходимых действий.

Эффективность — обеспечение эффективной реализации, которая вклю­чает:

эффективную реализацию компилятора;

эффективную генерацию компилятором кода программ.

Следует заметить, что многие из перечисленных характеристик конфликтуют друг с другом. Например, надежность и эффективность. Это подчеркивает сложности, с которыми приходится сталкиваться создателям новых языков.

Классификация языков программирования.

В настоящее время сложилось довольно много классификаций языков программирования.

Классификация по поддерживаемым методологиям программирования

Классификация языков по поддерживаемым методологиям появилась при-80-х годах XX века. Можно выделить следующие основные группы языков:

императивного(процедурного) программирования (Си, Фортран, Паскаль, Ада, Бейсик) и две важнейшие подгруппы:

языки структурного императивного программирования. Эти языки более известны под кратким именем — языки структурного программирования;

языки императивного параллельного программирования. Эти языки также обычно называют кратко — языки параллельного программирования;

языки, ориентированные на данные(Lisp, Prolog, Setl, Snobol);

языки объектно-ориентированного программирования(C++, Smalltalk, Ada-95, Java, Object Pascal) ;

языки компонентно–ориентированного программирования(C#);

языки функционального программирования;

языки логического программирования;

Классификация по степени абстракции от аппаратуры

По степени абстракции от машины можно выделить три группы языков.

Языки низкого уровня. Такие языки имеют простые машинноподобные команды и осуществляют прямой доступ к памяти. Пример — ассемблер для любой архитектуры.

Языки высокого уровня. Языки предоставляют возможность определять сложные структуры данных, доступ к памяти осуществляется через операции. Примерами языков этого уровня являются Pascal, С и Ada.

Языки сверхвысокого уровня. Команды исполняются на полностью абстрактной машине, полностью скрыт доступ к памяти. Пример таких языков — Prolog, SETL, APL, Miranda.

История и эволюция языков программирования.

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

Первое поколение: Машинные языки. Появились в середине 40-х годов XX века.

Второе поколение: Ассемблеры. Фактически это те же машинные языки, но представляются в виде мнемонических обозначений. Появились в конце 50-х годов XX века

Третье поколение: Процедурные языки. Появились в начале 60-х годов XX века. К этому поколению относят универсальные языки высокого уровня, с помощью которых можно решать задачи из любых областей (например, Algol-60, Си и т.п.).

Четвертое поколение: Языки поддержки сложных структур данных (например, SQL). Появились в конце 60-х годов XX века.

Пятое поколение: Языки искусственного интеллекта (например, Prolog). Появились в начале 70-х годов XX века.

Шестое поколение: Языки нейронных сетей (самообучающиеся языки!). Исследовательские работы в этой области начались в середине 80-х годов XX века.

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

Вот почему следующим в иерархии языков низкого уровня стоит обычно язык символического кодирования (автокод, или ассемблер). Операторы этого языка – те же команды, но они имеют мнемонические названия, а в качестве операндов используются не конкретные адреса в оперативной памяти, а их символические имена. Очевидно, что уровень языка ассемблера тот же, что и у машинного языка, а переход от одного из них к другому не более, чем транслитерация. И тем не менее это важный шаг на пути от языка ЭВМ к языку специалистов, которым эта машина нужна. Все языки низкого уровня ориентированы на определенный тип аппаратуры и в этом смысле специализированы. В настоящее время наиболее популярны языки ассемблеров для систем команд IBM-РС и VAX. Следующую, более многочисленную группу составляют языки программирования высокого уровня. Для всех языков высокого уровня общее то, что ориентированы они не на систему команд той или иной ЭВМ, а на систему операторов, характерных для записи определенного класса алгоритмов.

Языки императивного(процедурного) программирования.

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

Одним из первых языков высокого уровня был алгоритмический язык Pascal, названный в честь английского ученого Б. Паскаля. По своей идее это алголоподобный язык, вобравший в себя все лучшие проектные решения предшественника. Но вместе с тем это качественно новый шаг, связанный прежде всего с тем, что здесь впервые была воплощена концепция абстрактных типов данных. Если раньше все данные, преобразования которых описывались в программе, относились к одному из заранее определенных типов (целые, действительные и т. п.), то в Pascal были введены средства конструирования новых типов данных.

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

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

Отечественные языки программирования Алмир, Аналитик.

Языки, ориентированные на данные.

Практически все вышерассмотренные языки относились к вычислительным. Если же говорить о языках обработки символьной информации, то следует упомянуть о Lisp(List Processing Language), Prolog(Programming in Logic), РЕФАЛ (Алгоритмический язык рекурсивных функций). Язык ЛИСП разработан Дж. Маккарти в США. Он стал основой ряда программных реализаций интеллектуальных систем и дал толчок к разработке множества специализированных языков искусственного интеллекта и языков представлений знаний. В отличие от Lisp, Prolog – европейский язык. Он разработан А. Калмерауэром в Марсельском университете и базируется на логическом исчислении. Специфика языка состоит в том, что здесь имеется встроенная процедура поиска решений на графах. Наконец, третьим языком символьной обработки, с появлением которого в эту область были внесены интересные идеи, стал язык РЕФАЛ, созданный В. Турчиным. РЕФАЛ базируется на нормальных алгоритмах Маркова. Подобно Lisp, этот язык активно использует мощные средства преобразования списков на основе концепции распознавания по образцу.

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

А в 80-х гг. развитие языковых средств программирования стало все больше связываться с языками спецификации, обеспечивающими, с одной стороны, формулировку требований к разрабатываемой системе, а с другой – поддерживающими промышленные технологии разработки сложных программных комплексов. Одним из первых языков этого класса можно считать язык программирования Ada, названный так в честь первой женщины программиста Ады Лавлейс, дочери английского поэта Дж. Байрона. Это современный алгоритмический язык с традиционной структурой управления, возможностями определения типов и подпрограмм. Удовлетворяет язык и требованиям модульности. В дополнение к классическим свойствам язык обеспечивает программирование задач реального времени, возможности моделирования параллельного решения задач и обработку прерываний.

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

Существенным изменением в принципах построения языков программирования явился переход на объектно-ориенторованное программирование(ООП). Языки ООП (Си++, Object Pascal) отличаются тем, что в их структуре появились новые типы данных – классы. Класс как правило отражает свойство и поведение определенного объекта и содержит как обычные данные, так и методы (программы) их обработки.

Языки компонентно-ориенторованного программирования.

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

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

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

Языки программирования, способные оперировать компонентами, принято называть языками компонентного программирования. К таким языкам с определенной степенью можно отнести язык C#.

7

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]