Слайд 1Типизация и структуризация данных
Слайд 2Литература
Bирт Н. Алгоритмы + структуры данных = программы. - М.:
Мир.
ГОСТ 20886-85 Организация данных в системах обработки данных. Термины и
определения
Слайд 3Организация данных
Данные – это представление фактов и идей в формализованном
виде, пригодном для передачи и переработке в некоем процессе
Информация
- это смысл, который придается данным при их представлении
Организация данных – представление данных и управление данными в соответствии с определенными соглашениями.
Слайд 4Модель обработки информации
Обработка информации – это практическая реализация некоторой функции
F, которая отображает множество данных D во множество возможных результатов
R.
F – произвольная функция, которую надо «вычислить», например, перевод текста с русского на английский, нахождение максимума, расчет траектории ракеты, построение оптимального плана и т.д.
Слайд 5Организация данных
Представление данных (Data representation) – характеристика, выражающая
правила кодирования
элементов
и образования конструкций данных на конкретном уровне рассмотрения в
вычислительной системе
Управление данными (Data management) – совокупность функций обеспечения
требуемого представления данных,
накопления и хранения,
обновления и удаления,
поиска по заданному критерию и выдачи данных
Слайд 6Организация данных
Представление данных (Data representation) – характеристика, выражающая
правила кодирования
элементов
и образования конструкций данных на конкретном уровне рассмотрения в
вычислительной системе
Управление данными (Data management) – совокупность функций обеспечения
требуемого представления данных,
накопления и хранения,
обновления и удаления,
поиска по заданному критерию и выдачи данных
При постановке задачи необходимо выбрать некоторое абстрактное представление предмета рассмотрения, т.е. определить множество данных, отражающих реальную ситуацию (модель предметной области).
Слайд 7Уровни организации данных
Логическая организация данных: проектный уровень
отражает взгляд пользователя на
данные
применяются формальные методы описания динамически изменяющихся структур
Представление данных: уровень языка
реализации
описание данных на языке программирования
Физическая организация данных
учитывается размещение и связь данных в среде хранения
Слайд 8Понятие о типизации языка
Тип объекта
С машинной точки зрения
Форма
представления его значений в памяти.
Определяется способ доступа к объекту и
его части.
С точки зрения разработчика
множество значений и набор операций, выполняемых над этими значениями и обладающих некоторыми свойствами
Слайд 9Контроль типов
Основная функция типов
обеспечение более полной и легкой проверки правильности
программ.
Проверка заключается
в определении типов выражений
и их согласованности
с типами, которые требуются по правилам языка.
Такая проверка называется контролем типов.
Слайд 10Правила типизации
Программа называется типово-правильной, если она удовлетворяет правилам типизации языка:
приписывание
типов переменным и константам,
определение типов выражений по типам их частей,
согласование
типов частей языковых конструкций.
Язык программирования является типизированным, если для него определены правила типизации.
Слайд 11Статическая типизация
переменная, параметр подпрограммы, возвращаемое значение функции связывается с
типом в момент объявления и тип не может быть изменён
позже
Ада, Cи++, Паскаль
Динамическая типизация
переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной
Python, Ruby, PHP, Perl, JavaScript
Слайд 12Уровни типизации
Слабо типизированный (нестрогая типизация) – если информация и типе
используется только для обеспечения корректности программы на машинном уровне (ПЛ/1,
Алгол-68, Си и C++)
разрешается выполнение некорректных операций
повышает гибкость языка, но уменьшает понятность и надежность программ.
Сильно типизированный (строгая типизация) – если осуществляется полный контроль типов (язык Ада, C#)
повышает надежность и ясность программ
Слайд 13Преимущества типизации
Модель предметной области лучше структурирована, существует иерархия сортов элементов
Манипулирование
элементами более целенаправленно, разнородные элементы обрабатываются различным образом, однородные –
единообразно
В случае строгой типизации несоответствия типов фиксируются до выполнения программы, гарантируя отсутствие смысловых ошибок и безопасность кода
Слайд 14Тип данных
Определяет
Формат представления в памяти компьютера
Множество допустимых значений,
которые может принимать принадлежащая к выбранному типу переменная или константа
Множество допустимых операций, применимых к этому типу.
Слайд 15Простые и структурные типы данных
Простые
Целочисленные
Вещественные
Логический тип
Символьный тип
Структурированные
Массив
Структура
Перечисление
Класс
Слайд 18Структурированные типы
Необходимость в структурных типах данных
Для разработки программ методом
сверху вниз необходимо иметь возможность описывать данные на различных уровнях.
Данные
должны быть структурированы, чтобы их можно было эффективно выбирать.
Слайд 19Общее понятие структуры данных
Абстрактный тип данных (АТД):
математическая модель и
операции, определенные в рамках этой модели.
Для представления АТД используются
структуры данных, которые представляют собой набор переменных, возможно различных типов, объединенных определенным образом.
Абстрактные структуры данных предназначены для удобного хранения и доступа к информации
предоставляют удобный интерфейс для типичных операций с хранимыми объектами, скрывая детали реализации от пользователя
Слайд 20Массив
Массив – это последовательный набор элементов
Все элементы массива одного типа
Структуры могут хранить элементы разных типов
Доступ к конкретным элементам массива
происходит через использование индекса
Integer index 0
(zero)
Integer index 4
(four)
Слайд 21Форма записи массива в C++
При объявлении массива необходимо определить:
Тип
элементов массива
Размер массива
Имя массива
Определяет размер массива
Определяет имя массива
Определяет тип элементов
массива
int arrInter[17];
Слайд 22Организация доступа к элементам массива
Определяйте индекс для каждой из размерностей
Индекс
первого элемента равен нулю
3
2
1
row[3];
grid[1,2];
Слайд 23Перечисления
Перечисляемый тип представляет собой тип значений, содержащий конечное число именованных
констант
Синтаксис определения перечисления
Создание перечисления
Использование перечисления
enum DayTime { morning, day, evening,
night };
DayTime current;
if (current != night)
// выполнить работу
enum <имя> [ : базовый тип]
{список-перечисления констант(через запятую)};
Слайд 24Структуры
Создание структуры
Использование структуры
Employee companyEmployee;
companyEmployee.firstName = "Joe";
companyEmployee.age = 23;
public
struct Employee
{
string firstName;
int age;
}
Структуры могут хранить
элементы разных типов
Слайд 25Динамические структуры данных
Особенности:
отсутствие физической смежности элементов структуры в памяти
непостоянство и
непредсказуемость размера (числа элементов) структуры в процессе ее обработки
Элемент
динамической структуры состоит из двух полей
информационного поля или поля данных
поле связок
Слайд 26Связное представление данных
Достоинства :
размер структуры ограничивается только доступным объемом машинной
памяти;
при изменении логической последовательности элементов структуры требуется не перемещение
данных в памяти, а только коррекция указателей;
большая гибкость структуры.
Недостатки:
на поля связок расходуется дополнительная память;
доступ к элементам связной структуры может быть менее эффективным по времени.
Слайд 27Реализация структур данных
В языках программирования имеется возможность явно запрашивать и
использовать области динамической памяти.
С++
Указатель содержит адрес поля в динамической памяти,
хранящего величину определенного типа.
Сам указатель располагается в статической памяти
С#
Коллекция – группа объектов.
Коллекции упрощают реализацию многих задач программирования, предлагая уже готовые решения для построения структур данных
Слайд 28Коллекции общего назначения
Реализуют структуры данных:
стеки,
очереди,
динамические массивы,
словари (хеш-таблицы,
предназначенные для хранения пар ключ/значение),
отсортированный список для хранения пар
ключ/значение
Слайд 29Простейшие структуры данных
Список - упорядоченное множество, состоящее из переменного
числа элементов, к которым применимы операции включения, исключения.
Линейный список
- список, отражающий отношения соседства между элементами
Слайд 30Представление односвязного списка в памяти
Представление двусвязного списка в памяти
Слайд 31Стек
Стек - такой последовательный список с переменной длиной, включение и
исключение элементов из которого выполняются только с одной стороны списка,
называемого вершиной стека.
LIFO (Last – In – First - Out - "последним пришел - первым исключается").
Основные операции над стеком
включение нового элемента (английское название push - заталкивать)
исключение элемента из стека (англ. pop - выскакивать).
Слайд 32Очередь FIFO
Очередью FIFO (First – In – First - Out - "первым пришел - первым исключается")
называется такой последовательный список с переменной длиной, в котором
включение
элементов выполняется только с одной стороны списка (эту сторону часто называют концом или хвостом очереди),
а исключение - с другой стороны (называемой началом или головой очереди).
Основные операции:
включение,
исключение,
определение размера, очистка,
Слайд 33Дек
Дек - особый вид очереди.
Дек (от англ. deq -
double ended queue,т.е очередь с двумя концами) - это такой
последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух концов списка.
Операции над деком:
включение элемента справа;
включение элемента слева;
исключение элемента справа;
исключение элемента слева;
определение размера; очистка.