- •Введение к курсу
- •1. Понятия технологии программирования
- •1.1. Термин технологии программирования
- •1.2. Понятия традиционной архитектуры
- •1.3. Понятия традиционных языков программирования
- •1.4. Понятия формализации
- •1.5. Проблемы технологии
- •2. Команды и данные
- •1.1. Взаимодействие команд и данных
- •1.2. Особенности арифметики
- •Глава 2
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, демонстрирует то, что объектный подход в этом языке факультативен. Семантические различия процедурного и объектного подходов глубоки и сложны, связаны с различием в проектировании и технологиях разработки программ и могут быть реально осознаны и восприняты только после получения достаточных знаний, навыков и опыта программирования.
Семантические отличия языков, помимо собственно языка определяются, также языковым окружением включая операционную среду, компилятор, библиотеки, сервисные средства. Поэтому, например, программные тексты, приведенные в примерах, будут порождать различный исполняемый код и в ряде случаев, приводить к разным результатам.