- •Введение к курсу
- •1. Понятия технологии программирования
- •1.1. Термин технологии программирования
- •1.2. Понятия традиционной архитектуры
- •1.3. Понятия традиционных языков программирования
- •1.4. Понятия формализации
- •1.5. Проблемы технологии
- •2. Команды и данные
- •1.1. Взаимодействие команд и данных
- •1.2. Особенности арифметики
- •Глава 2
1.5. Проблемы технологии
Традиционный компьютер общего назначения, как и традиционный язык программирования, основаны на принципе последовательного, директивного управления, а большинство задач формулируется на принципах логического, предикативного подхода.
Пример1 Семантика высказываний и семантика команд
Логика
находимся в положении 1 (включено) - горит
находимся в положении 2 (выключено) - не горит
Абстракция
p1 ( в положении 1), p2 ( в положении 2) - предикаты (true, false)
s- переменная состояния со значением (0-не горит, 1-горит)
p1=>s=1
p2=>s=0
Реализация
int p1,p2,s;
scanf(“%d %d”,&p1,&p2);
// и как лучше?
1)if(p1) s=1;
if(p2) s=0;
2)if(p1) s=1;
else s=0;
3)if(p1) s=1;
else if(p2)s=0;
else s=1;
Проблема
Контроль инвариантности, полноты и непротиворечивости высказываний в реализации не предусмотрен семантикой языка
Понятие неопределенного значения (NULL значения)
Пример2 Последовательность выполнения
Логика
поворот заданной точки плоскости на 45
Абстракция
x и y – координаты точки
x= 2x-2y
y= 2x+2y
Реализация
int x, y;
scanf(“%d %d”,&x,&y);
float s2= sqrt(2);
x= s2*x-s2*y;
y= s2*x+s2*y;
Проблема
При вычислении y используется измененный x
Проблема параллельных вычислений
Поиск аналогий и установка соответствий между этими, в общем разными, принципами и составляет суть процесса программирования.
Специализированные средства позволяют выполнить задачу определенного типа более эффективно, но бесполезны для задач другого типа.
Программно-технические средства общего назначения обладают алгоритмической полнотой и универсальностью, но требуют верификации, т.е. доказательства правильности своего кода.
Понятия и основные тезисы к разделу
Технология программирования- дисциплина, изучающая процессы программирования и порядок их прохождения
Архитектура вычислителя – определяет структурную схему вычислителя, средства и способы доступа к элементам этой структурной схемы, набор и формат исполняемых команд, организацию памяти и способы доступа к ней.
Архитектура компьютера — помимо базовых принципов архитектуры любого вычислителя заключает в себе требования к функциональности (назначение, организация и разрядность интерфейсов, адресация памяти, правила обработки прерываний, набор и доступность регистров), а также принципы организации основных узлов, таких как процессор, ОЗУ, видеоподсистема, дисковая система, периферийные устройства и устройства ввода-вывода.
Машина Тьюринга – один из вариантов архитектуры вычислителя, которая была предложена на раннем этапе развития программных систем наряду с архитектурой конечных автоматов, машиной Поста и др., согласно тезису Черча этот тип вычислителя обладает алгоритмической полнотой
Машина фон Неймана – архитектура предложенная рабочей группой под руководством Джоном фон Нейманом в Принстоне и послужившая основой современных компьютеров, определяет процессор и однородную память, предназначенную для совместного хранения команд и данных
Гарвардская архитектура – отличается от архитектуры фон Неймана неоднородностью памяти по отношению к хранению и доступу для команд и данных
CISC (англ. Complex Instruction Set Computer)— концепция вычисления с полным набором команд (100-200), которая характеризуется нефиксированным значением длины команды, небольшим числом регистров, каждый из которых выполняет строго определённую функцию.
RISC (англ. Reduced Instruction Set Computer)— концепция вычисления с сокращённым набором команд (50-100), которая характеризуется фиксированным значением длины команды, большое количество регистров общего назначения (32 и более), любые операции «изменить» выполняются только над содержимым регистров.
Компьютер общего назначения - способен эмулировать машину Тьюринга.
Операция– простейшая инструкция задающая работу исполнителя
Структурное программирование– программирование, допускающее для управления порядком выполнения операций только последовательное выполнение, ветвление и итерацию
Компиляция- специальные действия по преобразованию исходного вида программы в вид понятный исполнителю
Окружение языка– включает операционную среду, компилятор, библиотеки, сервисные средства
Язык программирования высокого уровня – характеризуется лексикой подобной естественному языку, семантикой связанной с областью использования, независимостью от исполнителя
Язык высокого уровня общего назначения - язык высокого уровня предоставляющий возможность создания программы для эмулирования машины Тьюринга.
Верификация программы -доказательство правильности кода программы
Императивное программирование- технология программирования, характеризующаяся принципом последовательного изменения состояния вычислителя пошаговым образом.
Событийно-управляемое программирование– подход при котором задаются реакции программы на различные события