- •Преимущества
- •Связь: ooa→oop→ood
- •Механизм работы virtual
- •Абстрактный класс
- •Виртуальный деструктор
- •{Основные элементы языка программирования}
- •Основные подходы к семантике:
- •Формальное описание семантики:
- •Среда программирования
- •Объекты данных
- •Атрибуты объекта данных
- •Система типизации данных
- •Реализация типов данных
- •Типизация
- •Система типизации данных
- •Реализация типов данных
- •Связывание переменных
- •Контроль типов
- •Статистический контроль типов
- •Алгоритм статистического контроля типов
- •Динамический контроль типов
- •Параллелизм
- •Полиморфизм
- •Статический полиморфизм
- •Динамический полиморфизм
- •Преобразование типов
- •Связь: ooa→oop→ood
- •Среда программирования
- •Цель технологий параллелизма
- •Схемы параллелизма
- •Проблемы параллельного программирования
- •Показатели эффективности параллельного алгоритма Ускорение
- •Закон Густавсона-Барсиса
- •Масштабируемый алгоритм
- •Схемы параллелизма
- •Подтипы данных
- •Разновидности массивов. Статические
- •Кортежи
- •Разновидности массивов. Статические
- •Динамические
- •Атрибуты объекта данных
- •Операции над целыми числами
- •Вещественные числа
- •Числа с фиксированной точкой
- •Числа с плавающей точкой(float)
- •Ошибки вычислений с вещественными числами
- •Утечки памяти и повисшие указатели
- •Указатели на указатели
- •Типизированные указатели
- •Указатели на функции
- •[Отличия указателей и ссылок]
- •Параметры подпрограмм
- •Преимущества подпрограмм
- •Позиционное сопоставление
- •Сопоставление по имени
- •Методы передачи параметров:
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по значению-результату
- •Параметр по результату
- •Стековые языки
- •Циклы и рекурсия
- •Циклы со счетчиком
- •Операторы циклы без заданного числа повторений (бесконечно)
- •Динамический полиморфизм
- •Родовые (настраиваемые) сегменты и шаблоны
Подтипы данных
Это тип, определенный на основе уже существующего типа.
Значения просто ограничены некоторому диапазону.
<Составные типы данных.>
Массивы.
• Массив – структура данных, которая содержит последовательность элементов одинакового типа.
В состав входят:
• Количество элементов - указывается косвенно, путем задания диапазона изменения индексов.
• Тип данных для каждого элемента - он одинаков для всех элементов.
• Список значений индексов, применяемый для выбора элементов - задается в виде набора целых чисел, первое из которых соответствует первому элементу и т.д.
Фундаментальное свойство массива – время доступа к любому его элемента A[i] не зависит от значения индекса i.
Индекс первого элемента называется нижней границей, а индекс последнего - верхней границей массива.
Различают компоновку массива и размещение массива в памяти.
• При компоновке задаются относительные адреса элементов массива (относительно адреса 1 элемента), вычисляются формулы для адресации элементов.
• При размещении определятся действительные машинные адреса элементов и выделяется память.
Связывание типа индекса массива с переменной массива обычно выполняется статически, но по диапазону индексов происходит иногда динамически.
Если base – адрес начала массива, w –длина элемента массива, то адрес i-того элемента массива равен:
A[i]=(base-low*w)+ i*w
Low- нижняя граница
В языке С первый элемент массива имеет индекс 0, поэтому адрес i-го элемента массива равен:
A[i]= base + i*w
Время доступа к элементу массива - константа. Кол-во команд машинной программы, необходимых для вычисления адреса, не зависит от значений i.
Значение текущего индекса должно находиться в пределах допустимого диапазона. Такая проверка способствует повышению надежности вычислений. Однако реализована она в паскале, аде, ява, с#.
Некоторые языки предусматривают средства для инициализации массивов во время их размещения в памяти. Языки С, С++, ява, С#:
Int list[]={3,4,8,79};
Заставляет компилятор самостоятельно установить длину массива. Инициализация лишает систему возможности обнаружить ошибки выхода индексов за пределы корректного диапазона.
Разновидности массивов. Статические
Статические – массив со статическим связыванием по диапазонам индексов и таких размещением в памяти, которое происходит до начала работы программы.
Статические массивы достаточно эффективны, поскольку отсутствуют затраты времени как на динамическое размещение в памяти, так и на удаление из нее.
Недостаток. Память ими занимается а все время выполнения программы.
В языках С и С++ статистическими являются массивы, которые объявляются в функциях со спецификатором static.
Явные стековые массивы - массив со статическим связыванием по диапазонам индексов и таким размещением в памяти, которое происходит по итогам обработки объявления в ходе выполнения программы.
Массив удаляется из стековой памяти по завершению работы программы.
Повышают эффективность использования памяти: большой массив одной подпрограммы может занимать ту же область памяти, что и большой массив другой подпрограммы, причем так может продолжаться до тех пор, пока обе подпрограммы не окажутся активными одновременно.
К недостатку следует отнести дополнительные затраты времени на размещение и удаление массива из памяти.
Массивы, объявленные в функциях С и С++ без спецификатора static, считаются явными стековыми массивами.
Стековые - массив с динамическим связыванием по диапазонам индексов и динамическим размещением в памяти, которое происходит в ходе обработки объявления.
Связанность диапазонов индексов и размещение массива в памяти сохраняются в течении всей жизни переменной.
Главным преимуществом этой разновидности массивов по сравнению с двумя предыдущими считается гибкость – не нужно заранее знать (до момента использования) размер массива.
Явные динамические массивы - связывание и по диапазонам индексов, и по памяти происходит после размещения в памяти. (одноразовое)
Связывание по индексам и памяти происходит по запросу программы и в течение ее выполнения, но память выделяется в куче (динамич. память), а не в стеке.
Преимущества является гибкость: изменение размера массива всегда остается проблемой.
Недостаток - на размещение в куче тратится времени больше, чем на размещение в стеке.
Языки С С++ используются стандартные библиотечные функции malloc (размещение), free (освобождение памяти), которые являются операциями для размещения в куче и удаления из нее соответственно.
Для управления кучей применяют операторы new и delete.
Динамические
Динамические массивы – массив с таким динамическим связыванием по диапазонам индексов и размещению в памяти, которое повторяется многократно в течение всего жизненного цикла массива.
+ Максимальная гибкость. Массив по мере необходимости может расти или сжиматься прямо в ходе выполнения программы.
- На многократное размещение (удаление) в куче тратится много времени (и все оно приходится на период вычислений).
Массивы в Perl
Имена всех массивов должны начинаться с символа @.
Но поскольку элементы массива являются скалярными величинами, их имена предваряются знаком $.
На элемент массива в Perl можно сослаться при помощи отрицательного индекса. Отрицательное значение индекса обозначает номер позиции элемента с конца. Индекс – 1 соответствует последнему элементу массива, -2 –предпоследнему.
Массивы в JavaScript могут быть разреженными, в которых значения индексов не образуют непрерывную последовательность.
Массивы в питоне, руби увеличивают или с помощью методов для добавления элементов, или путем соединения с другими массивами.
Питон - списки. Объекты могут иметь любые типы, массивы здесь неоднородны.
Операции для конкатенации массива и определения вхождения элемента.
Прямоугольный массив - это многомерный массив, в котором строки и столбцы имеют одинаковое количество элементов.
Массив массивов – многомерный массив, в котором не требуется, чтобы длины у строк были одинаковыми. Еще называют не выровненными массивами.
Int[][]jaggedarray2 = new int []
{ new int [] {1,3,4,5,6},
New int[] {2,3,4},
New int[] {2,7}};
Сечение – подструктура массива, которая сама является массивом.
Сечение для трехмерного массива - двумерный, для двумерного – одномерный.
Ассоциативный массив - неупорядоченное множество элементов данных, индексированных таким же количеством величин, которые называются ключами.
Каждый элемент ассоциативного массива несет в себе ключ и значение. Ключ является единственным средством доступа к значению.
Ассоциативные массивы в питоне называют словарями.
В РНР применяются как обычные, так и ассоциативные массивы. Язык обеспечивает функции как индексированного, так и хешированного доступа к элементам.
Строки
Строка – последовательность символов.
В языках программирования строки представляются или в виде отдельного элементарного типа, или в виде массивов из элементов символьного типа.
Различают 3 вида:
1. Строки фиксированной длины
2. Строки переменной длины, не превосходящей заданного максимума ( строки с ограниченной динамической длиной)
3. Неограниченные по длине строки (строки с неограниченной динамической длиной)
Строки фиксированной длины (со статической длиной) – поддержка на аппаратном уровне.
#String в java
