- •Преимущества
- •Связь: ooa→oop→ood
- •Механизм работы virtual
- •Абстрактный класс
- •Виртуальный деструктор
- •{Основные элементы языка программирования}
- •Основные подходы к семантике:
- •Формальное описание семантики:
- •Среда программирования
- •Объекты данных
- •Атрибуты объекта данных
- •Система типизации данных
- •Реализация типов данных
- •Типизация
- •Система типизации данных
- •Реализация типов данных
- •Связывание переменных
- •Контроль типов
- •Статистический контроль типов
- •Алгоритм статистического контроля типов
- •Динамический контроль типов
- •Параллелизм
- •Полиморфизм
- •Статический полиморфизм
- •Динамический полиморфизм
- •Преобразование типов
- •Связь: ooa→oop→ood
- •Среда программирования
- •Цель технологий параллелизма
- •Схемы параллелизма
- •Проблемы параллельного программирования
- •Показатели эффективности параллельного алгоритма Ускорение
- •Закон Густавсона-Барсиса
- •Масштабируемый алгоритм
- •Схемы параллелизма
- •Подтипы данных
- •Разновидности массивов. Статические
- •Кортежи
- •Разновидности массивов. Статические
- •Динамические
- •Атрибуты объекта данных
- •Операции над целыми числами
- •Вещественные числа
- •Числа с фиксированной точкой
- •Числа с плавающей точкой(float)
- •Ошибки вычислений с вещественными числами
- •Утечки памяти и повисшие указатели
- •Указатели на указатели
- •Типизированные указатели
- •Указатели на функции
- •[Отличия указателей и ссылок]
- •Параметры подпрограмм
- •Преимущества подпрограмм
- •Позиционное сопоставление
- •Сопоставление по имени
- •Методы передачи параметров:
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по значению-результату
- •Параметр по результату
- •Стековые языки
- •Циклы и рекурсия
- •Циклы со счетчиком
- •Операторы циклы без заданного числа повторений (бесконечно)
- •Динамический полиморфизм
- •Родовые (настраиваемые) сегменты и шаблоны
Кортежи
Это структура данных из разнотипных элементов, не имеющих имен и представляемых значений.
Кортежи схожи с записями, но отличаются от них тем, что в записях элементы (поля) имеют имена, а в кортеже нет.
Списки
Это упорядоченная последовательность структуры данных.
• Первый элемент списка называют головой.
• Остальные элементы - хвостом списка.
• Типы элементов списка явно не объявляются
• Применяют как однородные так и неоднородные списки.
• Список редко имеет фиксированную длину, обычно их длина увеличивается и уменьшается в период выполнения программы.
• Впервые списки появились в функциональном языке Lisp.
43. Перегрузка данных, операторов, методов.
Перегрузка – одно и то же имя используется для двух или нескольких разных объектов или подпрограмм (включая операции).
<Перегрузка>
• Перегрузка – возможность использования одноименных подпрограмм или операторов, различающихся типом или количеством параметров в пределах одной области видимости.
• Перегрузка - один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются. (Полиморфизмом называется способность функции обрабатывать данные разных типов)
Перегрузка операторов — в программировании — один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.
Перегруженные методы постоянно находятся в одном классе. Они имеют одну и ту же область видимости с классом.
Перегрузка методов — один из способов поддержки полиморфизма в Java. Тем читателям, которые никогда не использовали язык, допускающий перегрузку методов, эта концепция вначале может показаться странной. Но, как вы вскоре убедитесь, перегрузка методов — одна из наиболее впечатляющих и полезных функциональных возможностей Java.
При вызове перегруженного метода для определения нужной версии Java использует тип и/или количество аргументов метода. Следовательно, перегруженные методы должны различаться по типу и/или количеству их параметров. Хотя возвращаемые типы перегруженных методов могут быть различны, самого возвращаемого типа не достаточно для различения двух версий метода. Когда Java встречает вызов перегруженного метода, она просто выполняет ту его версию, параметры которой соответствуют аргументам, использованным в вызове.
Процесс перегрузки данных – это реализация потока данных от единственного набора данных источника до одного или нескольких наборов данных
44. Составные типы данных.
Сложный (составной) тип — тип данных, объекты (переменные или постоянные) которого имеют внутреннюю структуру, доступную программисту.
Составной тип отличается от типов данных, входящих в его состав. Например массив элементов Integer не принадлежит к типу данных Integer.
В разных языках программирования набор базовых сложных типов может несколько отличаться (чаще по названию и деталям реализации). Есть, однако, объективные критерии — однотипность элементов и способ доступа, позволяющие выделить главные представители сложных типов (названия приводятся на примере Pascal, в котором Н.Вирт наиболее чётко сформулировал эти идеи).
• массив (array) — элементы только однотипные, доступ произвольный;
• запись (record) — элементы возможно разных типов, доступ произвольный;
• файл (file) — элементы однотипные, доступ последовательный (примечание: не путать с дисковым файлом!).
Разумеется, этот список не включает даже всех предопределённых в языках типов, но он отражает большинство моделируемых программистами структур данных.
Очень важной идеей, также родившейся на границе 60-70-х годов XX века, является возможность произвольного конструирования нужных структур из небольшого набора предопределённых типов. Чем адекватнее программист смоделировал обрабатываемые данные в рамках такого "конструктора", тем безошибочнее и долговечнее будет разработанная программа.
<Составные типы данных.>
Массивы.
• Массив – структура данных, которая содержит последовательность элементов одинакового типа.
В состав входят:
• Количество элементов - указывается косвенно, путем задания диапазона изменения индексов.
• Тип данных для каждого элемента - он одинаков для всех элементов.
• Список значений индексов, применяемый для выбора элементов - задается в виде набора целых чисел, первое из которых соответствует первому элементу и т.д.
Фундаментальное свойство массива – время доступа к любому его элемента 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};
Заставляет компилятор самостоятельно установить длину массива. Инициализация лишает систему возможности обнаружить ошибки выхода индексов за пределы корректного диапазона.
