- •Преимущества
- •Связь: ooa→oop→ood
- •Механизм работы virtual
- •Абстрактный класс
- •Виртуальный деструктор
- •{Основные элементы языка программирования}
- •Основные подходы к семантике:
- •Формальное описание семантики:
- •Среда программирования
- •Объекты данных
- •Атрибуты объекта данных
- •Система типизации данных
- •Реализация типов данных
- •Типизация
- •Система типизации данных
- •Реализация типов данных
- •Связывание переменных
- •Контроль типов
- •Статистический контроль типов
- •Алгоритм статистического контроля типов
- •Динамический контроль типов
- •Параллелизм
- •Полиморфизм
- •Статический полиморфизм
- •Динамический полиморфизм
- •Преобразование типов
- •Связь: ooa→oop→ood
- •Среда программирования
- •Цель технологий параллелизма
- •Схемы параллелизма
- •Проблемы параллельного программирования
- •Показатели эффективности параллельного алгоритма Ускорение
- •Закон Густавсона-Барсиса
- •Масштабируемый алгоритм
- •Схемы параллелизма
- •Подтипы данных
- •Разновидности массивов. Статические
- •Кортежи
- •Разновидности массивов. Статические
- •Динамические
- •Атрибуты объекта данных
- •Операции над целыми числами
- •Вещественные числа
- •Числа с фиксированной точкой
- •Числа с плавающей точкой(float)
- •Ошибки вычислений с вещественными числами
- •Утечки памяти и повисшие указатели
- •Указатели на указатели
- •Типизированные указатели
- •Указатели на функции
- •[Отличия указателей и ссылок]
- •Параметры подпрограмм
- •Преимущества подпрограмм
- •Позиционное сопоставление
- •Сопоставление по имени
- •Методы передачи параметров:
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по значению-результату
- •Параметр по результату
- •Стековые языки
- •Циклы и рекурсия
- •Циклы со счетчиком
- •Операторы циклы без заданного числа повторений (бесконечно)
- •Динамический полиморфизм
- •Родовые (настраиваемые) сегменты и шаблоны
Параметр по результату
• Параметр, передаваемый по результату, используется только для передачи результатов вычисления назад в вызывающую программу.
С#:
Void report(out int a, out int b){a=29, b=57;}
Obj. report(out m, out m); <-одинаковые имена
• Если первым присваивается значение параметра а, то значение фактического параметра вызывающего модуля – 57;
• Если первым присваивается значение b, тогда значение будет 29
- Т.к порядок может задаваться реализацией, различные реализации языка будут генерировать разные результаты.
- Момент для вычисления адреса фактического параметра может определяться в начальной фазе вызова подпрограммы или при возвращении из нее- неопределенность должен снять разработчик реализации языка
60. Программный стек и его изменение.
Для лучшего понимания механизма обработки исключения необходимо подробнее рассмотреть процесс изменения программного стека во время выполнения программы.
Стек представляет собой область оперативной памяти компьютера, которая используется для размещения информации, связанной с вызовом функций, а также для хранения автоматических локальных переменных. Перед вызовом функции в стек заносится адрес возврата, кадр состояния (фрейм), содержащий значения регистров и позволяющий перед возвратом восстановить состояние вычислительного процесса и, при необходимости, значения параметров. После входа в программную секцию функции, со стека снимаются значения параметров и помещаются автоматические локальные переменные. Перед возвратом из функции со стека снимаются локальные переменные, кадр состояния и адрес возврата, затем в стек заносится возвращаемое функцией значение. По кадру состояния восстанавливаются регистры, после чего управление передается по адресу возврата. Таким образом, в процессе выполнения программы стек увеличивается и уменьшается.
Раскручиванием программного стека называется процесс удаления из него значений, в результате которого уничтожаются стековые фреймы вызванных функций.
Увеличение программного стека происходит в направлении уменьшения адресов выделенной физической памяти компьютера. Код программы, напротив, размещается в младших адресах. Далее следует область данных, где размещаются внешние и статические переменные и константы, а затем динамически распределяемая память («куча»). При использовании больших локальных массивов данных или при значительной глубине рекурсии возможно переполнение стека, т.е. разрастание его до других разделов памяти.
Стековые языки
◘◘◘◘◘◘◘→считывание\Происходит с одного конца стек. Если записать 1234,
◘◘◘◘◘◘◘←запись / то первый который можно будет считать это 4.
•Для переадресации параметров используется машинная модель стека.
•При использовании стека, в качестве основного канала передачи параметров между словами, элементы языка образуют фразы.
•Forth,C#,Java.
•Стековая – это переменная удовлетворяющие двум условиям: связывание с памятью осуществляется при обработке операторов объявления переменных типы переменных связываются статически.
61. Рекурсивный и итерационный методы решения задач. Виды рекурсий.
Описание объектов или вычисления в терминах самого себя. Обращение подпрограммы к самой себе.
1) Рекурсия всегда должна иметь условие прекращения. Т.е. есть ситуация, когда нового рекурсивного вызова больше не происходит и цепочка рекурсивных вызовов возвращается к исходной точке.
2) Вызов с другим значением параметра. Чтобы не произошло зацикливание рекурсивных вызовов, необходимо, чтобы внутренний вызов производился с модифицированным значением параметра. При этом желательно, чтобы модификация стремилось к состоянию прерывания рекурсии.
Виды рекурсий.
1) Линейная рекурсия – выполнение тела подпрограммы приводит не более чем к одному рекурсивному вызову. Существует линейная цепочка вызовов. Вычисление факториала.
2) Повторная рекурсия – разновидность линейной рекурсии, когда рекурсивный вызов внутри подпрограммы является последним оператором. Отсутствуют какие-либо предварительные, или отложенные вычисления. В этом случае все действия подпрограммы выполнены и управление передается в другой вызов, а внутреннее состояние можно забыть. В этом случае нет необходимости сохранять все предыдущие промежуточные значения и результатом вычислений является последний вызов.
3) Каскадная рекурсия – возникает, если при выполнении тела подпрограммы, рекурсивные вызовы могут возникнуть более одного раза. Древовидная схема вызовов.
4) Взаимная рекурсия – циклическая последовательность взаимных вызовов нескольких подпрограмм, когда одна подпрограмма производит обращение к другой, а та в свою очередь снова может обратиться к первой. Всегда может быть сведена к линейной.
5) Удаленная рекурсия – если в теле функции при рекурсивных вызовах в выражении являющихся фактическими параметрами, снова встречаются рекурсивный вызов этой функции.
Недостатки рекурсивного подхода:
Время выполнения не всегда меньше, чем другими способами. Опасные зацикливания. Всегда нужно предусматривать условия выхода. Сложность понимания. Передача множества параметров.
