- •Преимущества
- •Связь: ooa→oop→ood
- •Механизм работы virtual
- •Абстрактный класс
- •Виртуальный деструктор
- •{Основные элементы языка программирования}
- •Основные подходы к семантике:
- •Формальное описание семантики:
- •Среда программирования
- •Объекты данных
- •Атрибуты объекта данных
- •Система типизации данных
- •Реализация типов данных
- •Типизация
- •Система типизации данных
- •Реализация типов данных
- •Связывание переменных
- •Контроль типов
- •Статистический контроль типов
- •Алгоритм статистического контроля типов
- •Динамический контроль типов
- •Параллелизм
- •Полиморфизм
- •Статический полиморфизм
- •Динамический полиморфизм
- •Преобразование типов
- •Связь: ooa→oop→ood
- •Среда программирования
- •Цель технологий параллелизма
- •Схемы параллелизма
- •Проблемы параллельного программирования
- •Показатели эффективности параллельного алгоритма Ускорение
- •Закон Густавсона-Барсиса
- •Масштабируемый алгоритм
- •Схемы параллелизма
- •Подтипы данных
- •Разновидности массивов. Статические
- •Кортежи
- •Разновидности массивов. Статические
- •Динамические
- •Атрибуты объекта данных
- •Операции над целыми числами
- •Вещественные числа
- •Числа с фиксированной точкой
- •Числа с плавающей точкой(float)
- •Ошибки вычислений с вещественными числами
- •Утечки памяти и повисшие указатели
- •Указатели на указатели
- •Типизированные указатели
- •Указатели на функции
- •[Отличия указателей и ссылок]
- •Параметры подпрограмм
- •Преимущества подпрограмм
- •Позиционное сопоставление
- •Сопоставление по имени
- •Методы передачи параметров:
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по значению-результату
- •Параметр по результату
- •Стековые языки
- •Циклы и рекурсия
- •Циклы со счетчиком
- •Операторы циклы без заданного числа повторений (бесконечно)
- •Динамический полиморфизм
- •Родовые (настраиваемые) сегменты и шаблоны
Система типизации данных
Сумма правил, связанных с типами данных и их экземплярами.
Определяет полный жизненный цикл объектов данных в программных вычислений и включает в себя несколько категорий правил:
Определения атрибутов переменных их связывание.
Определения типов данных.
Определения типов выражений.
Правила преобразования и проверки типов данных.
Реализация типов данных
Способ представления объекта данных этого типа в памяти компьютера( в процессе выполнения).
Способ представления операций, определенных для этого типа данных. Задает конкретные алгоритмы и процедуры для обработки выбранной формы размещения объектов данных в памяти.
•Реализация типов данных определяет, каким образом данные виртуальной среды вычислений отображаются на аппаратные и программные средства.
•Синтаксис атрибутов типов данных определяется формой объявления типа принятой в ЯП.
•Значения представляются литералами или именованием const.
Вызов операций задается при помощи специальных символов встроенных процедур или функций.
•При этом компилятор решает две задачи:
1)Максимально эффективно разместить данные в памяти.
2)Проверить соответствие данных указанному типу.
Связывание переменных
•Это процесс установления связи между атрибутами. Момент времени, когда эта связь устанавливается, называют временем связывания.
Связывание может происходить:
Во время проектирования языка.
При разработке компилятора.
При компиляции.
При загрузке или выполнении программы.
•Связывание типа - имя связывается с типом.
Var x: intenger; Int y;
•Связывание значения - имя связывается со значением.
Х:=15; У:=25;
•По времени различают две разновидности в период компиляции:
1)Статическое связывание - выполняется в момент компиляции.(раннее связывание, в период компиляции)
Явное объявление - оператор программы, сообщающий компилятору сведения об именах и типах объектов данных которые применяются в программе. Место размещения объявления в программе определяет время жизни объекта.
Неявное объявление - объявление по умолчанию, применяются лишь тогда когда отсутствуют явные объявления.
2)Динамич связывание - в период выпадения программы.(позднее связывание, в период выполнения)
•При динамическом связывании оператор объявления не содержит оператор объявления переменной не содержит имени типа.
•Тип переменной определяется при присвоении ей значения оператором присвоения.
•Любой переменной может быть присвоено значение любого типа.
•Во время выполнения программы тип переменной может меняться многократно.
•Важно понимать, что тип у переменной с динамически связанными типами имеет лишь временный характер.
+Повышенная гибкость программирования.
-Снижает надежность программ (из за сложности обнаружения ошибок).
-Высокая стоимость реализации.
-Программы работают дольше(используются интерпретаторы).
Используется в Python, Ruby, Javascript, php.
Типы переменных в зависимости от связывания
•Статическая - Это переменная, которая связывается с ячейкой памятью до начала выполнения программы и сохраняет связь с той же ячейкой до завершения программы.
В ЯП С и С++ разрешается спецификатор static в объявлении локальных переменных для функции.
•Стековая – это переменная удовлетворяющие двум условиям: связывание с памятью осуществляется при обработке операторов объявления переменных типы переменных связываются статически.
+Все программы могут совместно использовать одну и ту же область памяти для ранения своих локальных переменных.
-Дополнительные затраты времени на размещение в памяти и удаление из памяти
-Уменьшение скорости доступа из-за использования косвенной адресации.
-Подпрограммы не имеют возможности хранить предысторию вычислений.
•В языках Java,C++ и С# локальные переменные в методах становятся стековыми переменными по умолчанию.
•Явные динамические переменные - безымянные ячейки памяти, размещаемые и удаляемые с помощью явных операторов программы.
•Обращаются к этим переменным можно только с помощью указателей ссылок.
•Явные динамические переменные создаются или оператором или вызовом предусмотренной библиотечной подпрограммы.
•В ЯП java все данные за исключением основных скалярных величин, являются явными динамическими объектами доступными через ссылочные переменные.
•Неявные динамические переменные связываются с динамической памятью только при присваивании им значений.
+Высокая степень гибкости позволяющая писать обобщенные программы.
-Высокие накладные расходы на обслуживание всех динамич атрибутов, среди которых могут быть тип: элементов массива, диапазон индексов и многое другое.
-Потеря компилятором возможностей распознавания многих ошибок.
