VisualData

Кортеж

Кортеж является универсальным способом организации данных с точки зрения их хранения и доступа.

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

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

Знания о содержимом элемента и способах его формирования лежат за пределами кортежа. Кортеж лишь предоставляет место для размещения и долговременного хранения элемента.

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

Кортеж обладает способностью создавать собственный экземпляр. Экземпляр кортежа отличается от его же копии нулевыми значениями смещения для всех его значений, не являющихся в свою очередь кортежами. Иными словами, экземпляр — это копия структуры. Эту способность использует например класс, как при создании классов-наследников, так и при создании своих производных объектов, в которых взаимная идентификация атрибутов и производных от них значений обеспечивается совпадением номеров элементов в соответствующих кортежах.

В кортеже не инициализированное значение будет иметь нулевое значение смещения, чем и отличается от "пустого" значения с нулевой длиной. Не инициализированным значением можно бесконфликтно оперировать, в том числе рассматривая его как "пустое" значение.

В кортеже можно разместить структуру данных произвольной сложности. Логический формат кортежа аналогичен XML, у которого вместо тегов используются индексы. К отдельному значению в сложной структуре можно обратится напрямую, используя в качестве адреса последовательность индексов (маршрут). А можно и относительно кортежа-владельца.