Управление сложностью данных с помощью типов, структур, АТД и объектов

Основное, если не единственное, назначение Компьютера — обработка информации. Это не всегда должно быть вычисление математических формул. В общем, это преобразование одной порции информации в другую. Компьютеры работают только с такой информацией, которую можно представить в виде дискретных данных. Входом и выходом для вычислительной машины всегда являются Натуральные числа или текст (последовательность символов из словаря, которая соответствует определенным натуральным числам).

Хотя данные неструктурированы, в них трудно распознать какой-то смысл. Но как только данные приобретают какую-либо структурированную форму, они становятся осмысленными и пригодными для дальнейшего преобразования.

Тип

Простейшей формой организации данных является Тип. Как правило, Тип данных определяет набор значений с определенными характеристиками. Обычно он определяет размер в байтах. Примитивный тип данных – это упорядоченная группа байтов. Когда переменная какого-либо примитивного типа данных имеет только одно значение (содержит только одну часть информации), она называется Скалярной, а тип — Скалярный тип данных. Хорошо известными примерами являются целое число, число с плавающей запятой, указатель и строка. Набор примитивных типов данных известен как структурированный тип данных и позволяет хранить несколько значений. Хорошими примерами этого типа являются массив, структура, запись и файл. Ключевым свойством является упорядоченная группа байтов. Внутренняя организация проста, и все действия (например, чтение, изменение) выполняются непосредственно над данными в соответствии с аппаратной архитектурой, которая определяет порядок байтов в памяти (Little-/Big-Endian).

Структура данных

Следующий уровень абстракции данных называется Структура данных. Это приносит больше сложности, но также и больше гибкости в правильном выборе между скоростью доступа, возможностью роста, скоростью модификации и т. д. Внутренне он представлен набором скалярных или структурированных типов данных. Основное внимание уделяется подробным сведениям о внутренней организации и набору правил управления этой организацией. Существует два типа структур данных, которые возникают из-за разницы в расположении в памяти базовых элементов:

  • Структуры массивов данных (статические), основанные на физически смежных элементах в памяти, без промежутков между ними.
  • Связанные структуры данных (динамические), основанные на элементах, динамически размещаемых в памяти и связанных в линейную структуру с помощью указателей (обычно одного или двух)

Известные примеры: связанный список, хэш (словарь), набор, список. Внутренняя организация по-прежнему открыта, и все действия с данными также выполняются напрямую.

Абстрактный тип данных (ADT)

Более высокий уровень абстракции данных представлен Абстрактным типом данных (ADT), который смещает основной акцент с «как хранить данные» на «как работать с данные». АТД определяется операциями (функциями) для обработки данных и контроля их согласованности, а также структурой данных для фактического хранения информации. Внутреннее представление данных скрыто от пользователей и не должно быть доступно напрямую (по задумке). Все взаимодействия с данными осуществляются через интерфейс (операции доступны пользователям). Обычно для каждого АТД определяется несколько примитивных операций, например

  • create — конструктор нового экземпляра
  • destroy — деструктор существующего экземпляра
  • add, get — функции set-get для добавления и удаления элементов экземпляра.
  • is_empty, size — полезные функции для управления существующими данными в экземпляре.

Наиболее известными примерами АТД являются стек и очередь. Оба этих АТД могут быть реализованы с использованием либо массивов, либо связанных структур данных, и оба имеют определенные правила добавления и удаления элементов. Все эти особенности абстрагируются как функции, которые, в свою очередь, выполняют соответствующие действия над внутренними данными. Разделение АТД на операции и структуру данных создает барьер абстракции и позволяет сохранить надежный интерфейс с гибкостью для изменения внутренних компонентов без побочных эффектов на код, который использует этот АТД.

Объект

Более полный способ абстрагирования данных представлен объектами. Объект можно рассматривать как контейнер для фрагмента данных, который имеет определенные свойства. Как и в случае с АТД, эти данные недоступны напрямую (так называемая инкапсуляция или изоляция), но вместо этого каждый объект имеет группу тесно связанных Методов, применимых для работы с его объектами. данные для создания ожидаемого поведения для этого объекта (известного как полиморфизм). Все такие методы, по сути, являются просто функциями, собранными в классе, но они становятся методами, когда вызываются для работы с определенным объектом. Методы также могут быть наследованы от другого класса, который в данном случае называется суперклассом. В отличие от АТД, объект представляет не один конкретный тип данных, а скорее сущность, которая имеет ряд атрибутов и ведет себя так, как предполагается, при вызове ее методов. Атрибуты — это не что иное, как переменные любых типов (в том числе и АТД), и они также собираются в рамках класса. Формально говоря, классы действуют как спецификации всех атрибутов объекта и методов, которые могут быть вызваны для работы с этими атрибутами.

Парадигма объектно-ориентированного программирования (ООП) использует объекты в качестве центрального элемента дизайна программы. В отличие от парадигмы Процедурного программирования, где основное внимание уделяется разбиению проектов на в основном независимые задачи, в ООП программы состоят из ряда объектов. Каждый объект рассматривается как экземпляр некоторого класса, который определяет его поведение. В общем дизайне ООП объекты используются для:

  • хранить данные программы как их изолированные атрибуты
  • сохранить логику программы в качестве своих методов
  • достичь основной цели программы путем взаимодействия объектов друг с другом посредством передачи сообщений (путем вызова методов объектов).