If C then S1 else S2and
задается формулой математической логики:
(c(s) p(s1,s)) and (( c(s) p(s2,s))
Если вычисление С в состоянии S истина, то смысл if – оператора такой же, как смысл S1, в противном случае вычисление С дает результат не истина и смысл if – оператора есть смысл S2.
Неформальное объяснение семантики управляющих операторов цикла и вызовов процедур с параметрами построено с использованием оператора if. Проверяется условие if после одного прохода операторов цикла и вызова подпрограммы. Если результат истина, то выполняется оператор после then, иначе выполняется оператор после else.
Смысл программы устанавливается путем построения входных и выходных утверждений для всей программы на основе утверждений для отдельных операторов. Результатом является доказательство того, что если входные данные удовлетворяют утверждение на входе, то выходные данные удовлетворяют утверждение на выходе.
3.3.Данные
Программа на языке ассемблера списывает действия с ячейками памяти и регистрами, в которых размещаются значения переменных или команды. Переменные должны иметь конкретный тип по той простой причине, что компилятор под каждый тип выделяет определенный объем памяти. Действия с однотипными переменными выполняются быстрее. Поэтому одно из важнейших мест в языке программирования занимают структурирование данных.
Тип – это множество значений и множество операций над этими значениями.
Поясним определение типа на понятии int в языке С. int – это тип, состоящий из конечного множества численных значений в пределах от 65000 до 4 миллиардов, в зависимости от компьютера, и набора операций над этими значениями: +, -, <, <= и т.д.
При объединении структуры данных используются следующие термины:
1.Значение – простейшее неопределяемое понятие.
2.Литерал – конкретное значение заданное в программе в
виде последовательности символов, например 19, FALSE,
53.1, “m”, “Привет” и т. д.
3. Представление – значение, представленное конкретной
строкой битов. Например, символьное значение ‘t’может
быть представлено строкой из восьми битов 1011.1000
4. Переменная – присвоенной ячейке памяти или ячейкам,
которые содержат представленные значения конкретного
типа. Значение может во время выполнения программы.
5. Константа – имя, присвоенное ячейке или ячейкам памяти,
которые содержат представленные значения конкретного
типа. Значение не меняется во время выполнения программы.
6. Объект – это переменная или константа.
3.4. Оператор присваивания
Оператор присваивания решает три задачи:
1.Вычисление значения выражения в правой части оператора.
2. Определение адреса ячейки памяти для левой части .
3. Копирование значения, вычисленного на шаге 1, в
установленную на шаге 2 ячейку памяти:
Виды оператора присваивания: =, :=.
Виды выражний с оператором присваивания: x := a + b.
3.5. Контроль соответствия типов
В предыдущем параграфе оператор присваивания не отслеживает соответствие типов левой и правой частей выражения.
Контроль соответствия типов – это проверка соответствия типа вычисленного выражения левой и правой части с типом адресуемой переменной левой части при присваивании. Сюда же входит и присваивание фактического параметра формальному при вызове процедуры.
Существуют три подхода к решению проблемы контроля соответствия типа:
- Программист сам решает эту программу.
- Неявно преобразовать тип правой части к типу левой части выражения.
- Отказ от выполнения присваивания, если типы различаются.
Все три похода имеют как преимущества, так и недостатки. Строгий контроль соответствия типов (подход 3 – отказ) может исключить скрытые ошибки, которые обычно вызываются опечатками и недоразумениями, но увеличить память, необходимую для языка программирования, и время обработки программы.
3.6. Управляющие операторы
Структурное программирование – это стиль программирования, который допускает использование только тех управляющих параметров, которые обеспечивают хорошо структурированные программы, легкие для чтения и понимания.
Есть два класса хорошо структурированных управляющих операторов:
1. Операторы выбора одной из двух или нескольких альтернативных последовательностей выполнения программы: условный оператор if и переключатели типа case и switch.
2. Операторы цикла for, while и do, в которых повторяется выполнение последовательности операторов.
Операторы присваивания обычно выполняются в той последовательности, в какой записаны. Управляющие операторы используются для изменения порядка выполнения программы.
3.7. Подпрограммы
Подпрограммы – это сегмент программы, состоящий из объявлений данных и исполняемых операторов, который можно неоднократно вызывать из различных частей программы. Подпрограммы называют процедурами – procedure, функциями -function, подпрограммами - subroutine или методами – method.
При вызове подпрограммы ей передаются параметры для задания исходных данных и получения результатов.
3.8. Модули
Тех элементов лингвистического обеспечения, о которых шла речь, недостаточно для грамотного, профессионального и быстрого написания программных систем объемом более 3000 строк. Они требуют большого количества правил и согласований между создателями подобных программных комплексов. Современный метод структурирования или инкапсуляции (капсула, контейнер) данных и подпрограмм в крупные объекты, называемые модулями, позволяют уменьшить эти издержки до модуля.
Тот факт, что язык поддерживает модули, не помогает разбить программную систему не модули. Качество системы непосредственно зависит от качества декомпозиции, которое полностью определяется компетенцией программиста.
Преимущество модульного программирования состоит в возможности компиляции модуля. При этом внешние ссылки заполняются и в дальнейшем устанавливаются компоновщиком. Одним из основных методов декомпозиции программы является объектно-ориентированное программирование (ООП), опирающееся на концепцию типа. Согласно ООП, модуль следует создавать для любого реального или абстрактного объекта, который представляется набором данных и операций над ними.
Дата добавления: 2016-08-08; просмотров: 569;