Организация объектов.
1. Общие принципы.
Организация данных одна из главных задач не только в программировании, и от ее решения зависят возможности структурирования объектов и их группирования и, в конечном счете, возможности языка. Напомним хотя бы значение теории множеств для развития математики. Простота и общность этой теории служит фундаментом многим теоретическим и практическим исследованиям. Для эффективной реализации при определении множества необходимо эффективно реализовать следующие операции:
1. Принадлежность объекта множеству.
2. Не принадлежность объекта множеству.
3. Включение.
4. Включение.
5. Включение справа.
6.Включение с замыканием справа.
7.Не включение.
8.Объединение.
9.Пересечение.
10 ¬ Дополнение. Оно же отрицание.
Возможно, мы не включили разность двух множеств или еще чего-то часто встречающегося, предложенного вполне достаточно для реализации остального. Ниже рассмотрим подробно реализацию этих операций. Заметив что, для практической реализации представляет интерес доступ к объектам множества. Вот по этим признакам и сформулируем разные методы организации множеств.
1. Классы, типы. Class, Type
Классы и типы представляют описание структуры объекта и служат носителями информации для создания объекта. Созданный объект хранит в себе информацию о своем классе или типе. Дополнительной функцией классов и типов является анализ ссылок на легальность доступа к объекту. Проверка на принадлежность классу и типу осуществляется проверкой хранимой информации о классе объекта при проверке легальности. Например, при входе в процедуру. Доступ к объектам класса или типа осуществляется непосредственно ссылками. Отметим, что определение множества в данном случае происходит до создания объектов так, как именно классы и типы являются своего рода шаблонами для создания объектов.
2. Массивы. Array
Обычно в языках не предусмотрена проверка на принадлежность объекта массиву. Основной целью, которая ставится в данной организации данных, является произвольный быстрый доступ к объектам данной группы (или множества, или массива) с помощью индекса. Массив можно создавать в отсутствие объектов. Сами объекты составляющие массив могут быть созданы позже. Необходимо отметить что в данной структуре могут находится объекты одного класса или типа.
3. Лента. Tape. Группа.
Лента представляет собой группу объектов доступ, к которым возможен только последовательно. Сначала первый, затем второй объект и т.д. до конца ленты. Такая структура используется для последовательного доступа к объектам. Например, к командам выполняемых компьютером последовательно. Удобна для внешнего доступа, так как не требует индекса, и доступ может осуществляться извне автоматическим наращиванием индекса (или адреса). Это же свойство используется при анализе входной цепочки объектов при ее анализе. Например, при трансляции. Проверка на принадлежность объекта данной группе осуществляется перебором всех объектов группы (с учетом свойств выборки). Важной особенностью группирования лентой является наличие объектов в группе во время определения группы Tape. И не допускает добавление или исключения объектов их группы, и более того, объект может принадлежать только одной группе Tape.
4. Группа. Group.
Группа объединяет существующие объекты. В зависимости от свойств и при включении объекта в группу создает ссылку на себя. В таком случае проверка объекта на принадлежность группе заключается в проверке наличия у объекта соответствующей ссылки (Свойство Indexed =Yes). И, в остальном, аналогична контейнеру в JAVA. Данная группа позволяет добавлять и удалять объекты из группы. Допускается принадлежность объекта нескольким группам одновременно. Допускает обращение по индексу (Item).
List (список), который хранит группы элементов в указанном порядке
Set (набор), который позволяет добавление одного элемента каждого типа
Map (карта) хранит пары ключ-значение, что похоже на мини базу данных
Кроме объектов, группа может содержать другие группы.
5. Множества. Multitude.
Множество определяется формальными параметрами и предикатом относительно этих параметров. Принадлежность объекта множеству устанавливается истинностью предиката входящего в определение множества. Исходя из такого определения понятно, что на момент определения множества наличие объектов не обязательно.
Так, как приведена только первая часть скажу, что, например, возможна такая форма Private Sub (X: Mu ), где Mu не только класс, или тип, но и группа или множество.
И что группирование и множества создают так называемую «горизонтальную иерархию» объектов в противоположность «вертикальной иерархии» создаваемой наследованием классов и типов. Например:
Multitude ИмеющиеЦвет: (X: Object) { Color «здесь знак принадлежит» X.Properties}
Так множество ИмеющиеЦвет содержит объекты любого класса имеющего свойство Color.