Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
26.04.2015
Размер:
571.9 Кб
Скачать

1.3. Понятия традиционных языков программирования

Машино ориентированные языки

С точки зрения процессора (как исполнителя) команды представляют по особому организованные данные

B82301 - внести значение 0123h в AX;

052500 - прибавить значение 0025h к AX;

8BD8 - переслать содержимое AX в BX;

31C0 - очистка AX;

CD20 - конец программы. Передача управления операционной системе.

Машино ориентированный язык во многом представляет мнемоническую запись этих данных

:0100 MOV AX,1

:0102 MOV CX,0003

:0105 ADD AX,0001

:0108 LOOP 0105

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

Проблемно ориентированные языки

Язык SQL для баз данных ориентированный на работу с таблицами реляционных баз данных. В начале 80 годов появление этой методологии на порядок ускорило разработку приложений для БД.

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

Высокая эффективность программирования связана с тем, что в ответственность разработчика входит только формализация задачи с использованием SQL, все остальные этапы автоматизированы.

Запись на языках программирования традиционно относящихся к языкам высокого уровня вывода приветствия Hello:

//C

#include <stdio.h>

int main(void)

{ printf(“Hello!\n”);

return 0;

}

//C++

#include <iostream.h>

int main(void)

{ cout<<“Hello”<<endl;

return 0;

}

//Java

public class hello

{ public static void main(String[] args)

{ System.out.println(“Hello”);

}

}

//C#

using System

class hello

{ public static void main()

{ Console.Writeln(“Hello”);

}

}

Общее в записи:

  • записи представляют последовательности символов организованных в строки;

  • записи структурированы (выделяются начало и конец программы в целом и отдельных элементов, определена соподчиненность элементов, запись воспринимается последовательно от начала и до конца);

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

Различное в записи:

  • число элементов в записях и их соподчиненность;

  • символы и слова, используемые в записях.

Суть общности

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

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

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

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

Структурное программирование допускает всего три типа структур:

  • последовательное выполнение;

  • ветвление;

  • итерация.

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

Высокий уровень языка подразумевает:

  • лексика и синтаксис языка схожи с естественным (английским) языком;

  • семантика включает понятия типичные для области, где язык используется;

  • запись программы абстрагирована от исполнителя.

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

Суть различия

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

Семантические отличия принципиальны и требуют формирования определенного типа мышления. Например слово class в ряде примеров отражает, что язык объектно-ориентирован. Отсутствие словаclassв примере записи на C++, являющимся объектно-ориентированным расширением языка C, демонстрирует то, что объектный подход в этом языке факультативен. Семантические различия процедурного и объектного подходов глубоки и сложны, связаны с различием в проектировании и технологиях разработки программ и могут быть реально осознаны и восприняты только после получения достаточных знаний, навыков и опыта программирования.

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