Select ID, Name from SQLUser.Person
Встроенныепакеты
Для совместимости с ранними версиями используются «встроенные» пакеты:
· "%Library" – любой %class без имени пакета это просто часть пакета "%Library"
· "User" – любой не-%class без имени пакета принадлежит пакету "User"
Элементы классов
При определении класса устанавливается его тип и поведение. Фактически это определение состоит из свойств и методов класса (от классов типов данных не могут образовываться экземпляры, поэтому они обладают лишь методами, но не свойствами). К полному определению класса относятся и другие функциональные элементы, такие, как запросы и индексы, а также параметры и ключевые слова. Полный список элементов определения класса охватывает:
· однозначное имя класса;
· ключевые слова — несколько ключевых слов, позволяющих модифицировать определение класса;
· свойства (известные также как состояние) — элементы данных для хранения в экземплярах класса. Свойства могут быть константами, встроенными объектами и ссылками на хранимые объекты. Классы типов данных не содержат свойств;
· методы — код, реализующий те или иные функциональные возможности;
· параметры класса — значения, осуществляющие настройку функциональных возможностей класса во время его компиляции (обычно с использованием генераторов методов);
· запросы — операции с множеством экземпляров класса;
· индексы — структуры в долговременной памяти, оптимизирующие доступ к объектам.
|
|
Работа с классами выполняется в Caché Studio с помощью мастеров, которые позволяют в режиме диалога создавать классы, параметры класса, свойства, методы, запросы, индексы. Перед использованием класс необходимо откомпилировать.
Синтаксис определения класса:
Class <Пакет.Имя класса> Extends <Список суперклассов>
[ ключевое слово=значение, …]
{код}
Пример:
Class Im.Class1 Extends %Persistent [classType = persistent, procedureBlock]
{ …
}
гдеIm – имяпакета, Class1 – имякласса, %Persistent – суперкласс, classTypeиprocedureBlock – ключевыеслова.
Имя класса
Имя класса – уникальный идентификатор класса , для облегчения восприятия допускается использование обоих регистров букв. Внутри Caché имена преобразуются в верхний регистр, что следует учитывать при назначении имени. Имена, начинающиеся со знака %(процент) – зарезервированы для элементов системных классов. Ограничений на длину имени нет, но только первые 25 символов используются для идентификации класса.
Ключевые слова
Определение класса может быть модифицировано посредством нескольких ключевых слов. Все ключевые слова необязательны и имеют стандартное значение на тот случай, если они не заданы. Ключевые слова необходимы, прежде всего, при разработке определений классов.
|
|
Примеры ключевых слов:
· Abstract – означает, что нельзя создать экземпляр данного класса, используется для классов типов данных.
· ClassType – определяет поведение класса. Допустимые значения: datatype, persistent,и serial.
Например:
1. ClassType = datatype – означает, что это класс типа данных.
2. ClassType = persistent – хранимый класс
3. ClassType = serial – сериализуемый класс
· Final – означает, что это финальный класс, т.е. от него невозможно образование подклассов.
· Super – задает один или несколько суперклассов для данного класса. По умолчанию класс не имеет суперкласса.
В Cache Studio ключевые слова представляются с помощью таких элементов управления, как выпадающие списки, кнопки и т.п., так что вы можете не запоминать их имена. Наряду с ключевыми словами классов в объектной модели Cache имеются и ключевые слова для свойств, методов, запросов и индексов.
| Мастер создания классов
Мастер создания класса, несомненно, предоставляет наиболее легкий путь к созданию определения нового класса в Cache, направляя разработчика на протяжении нескольких первых шагов
Вызвать его можно либо через меню Файл/Создать/Класс Cache, либо выбрав опцию Создание класса контекстного меню Классы в окне проекта В поле Имя пакета введите имя пакета, которому должен принадлежать новый класс. Возможен как выбор имени существующего пакета, так и ввод нового имени. В следующем поле введите имя класса, не забывая о том, что имена, начинающиеся с процента (%), зарезервированы для системных классов Cache.
Имеется возможность поместить описание класса в поле Описание, в тексте допустимы теги HTML. Документировать класс не обязательно, но настоятельно рекомендуется, особенно когда над проектом трудятся несколько программистов. Созданные на этом этапе описания используются Cache при автоматическом создании системной документации класса. На практике иерархия классов нередко целиком составлена и документирована уже на ранней стадии проекта, до того, как началась фаза программирования, в процессе которой постепенно, шаг за шагом реализуется функциональность объекта.
Далее укажите тип класса, как правило, для хранимых классов — Persistent, а для встраиваемых — Serial. Классы типа Registered являются временными, у них отсутствуют методы загрузки и сохранения значений в базе данных. Abstract (абстрактные) классы служат шаблонами для порождения производных классов. Классы типа Data Type являются носителями набора методов (заранее известного состава), так называемого интерфейса типов данных, определяющего поведение свойств данного типа. Классы CSP используются в Cache Server Pages.
От родительского класса, заданного в поле Имя Суперкласса, класс наследует свои элементы. Если поле содержит имена нескольких классов, разделенные запятой, то имеет место множественное наследование. От перечисленных классов могут быть унаследованы все элементы класса (свойства, методы и т.д.), а при совпадении имен действует определение элемента из последнего класса в списке. Некоторое исключение составляют ключевые слова класса, которые наследуются от первого суперкласса в списке.
Если класс определен как хранимый, мастер предложит ввести ряд дополнительных характеристик. Вы можете указать владельца класса, если желаете воспользоваться средствами безопасности SQL. В поле Имя таблицы SQL вводится имя, под которым класс будет отображаться в таблицу SQL, в противном случае в качестве имени таблицы используется имя класса. Необходимость в переопределении имени возникает в том случае, когда оно является зарезервированным словом SQL или содержит знак подчеркивания, недопустимый в именах SQL.
Следующие два флажка управляют наследованием поведения от некоторых важных системных классов. Первый из них, будучи установлен, указывает на необходимость автоматического включения методов XML-отображения. Если установить второй флажок, будут добавлены методы, позволяющие автоматически заполнять класс псевдослучайными тестовыми данными.
Определение класса создано. Появится окно редактирования Cache Studio с его представлением на языке CDL и окно Инспектора с табличным представлением.
Свойства
Свойства представляют состояние объектов. Если это осуществляется посредством хранения некоторых значений (как это имеет место в Cache), но в этом случае говорят об атрибутах объектов. Возможность доступа к свойствам и операций над ними базируется на объектной модели Cache и определениях классов. Во многих объектно-ориентированных языках, таких, как Java и C++, не существует целостной концепции свойства. Вместо неё используется комбинация закрытых переменных и открытых методов, делающих эти переменные доступными.
Существует два типа свойств:
· Свойства, содержащие значения
· Свойства-связи, задающие связи между объектами.
Свойство имеет однозначное имя, тип, необязательный список ключевых слов, необязательный список параметров, определенных для соответствующего типа данных.
Синтаксис:
Property <Имя свойства> as <тип> (параметры) [ключевые слова]
Примеры свойств, содержащих значения:
Property Total As %Float (SCALE = 2);
Property Description As %Library.String (MAXLEN = 300);
Property PlayingNow As %Library.Boolean [ InitialExpression = 1 ];
Property Rating As %Library.String (VALUELIST = ",G,PG,PG-13,R");
Property Pr As %String [ Required ];
Property SALARY As %Integer (MINVAL = "0", MAXVAL = "1000000");
Property SecretName As %String (MAXLEN = "20") [ Private, Required ];
Примерсвойствасвязи:
Relationship Chapter As Chapter [Inverse = Book, Cardinality = Many];
Для свойств в Caché справедливы следующие утверждения:
· Свойства могут быть константами, ссылками на хранимые объекты, встроенными объектами, потоками данных (CLOB’ы), либо коллекциями констант или объектов.
· Со свойствами непосредственно связан набор автоматически выполняемых методов проверки и сохранения значений.
· При осуществлении доступа к значениям свойств, а также при их сохранении, возможно прозрачное изменение формата и другие изменения данных.
· Объекты, на которые делаются ссылки, равно как и встроенные объекты, при обращениях к соответствующим свойствам автоматически загружаются в память (подкачиваются).
Видимость свойств
Свойства могут быть определены как открытые (public) или как закрытые (private). Если свойство является закрытым, оно может быть использовано лишь методами класса, к которому оно относится. Открытые свойства (каковыми они и являются по умолчанию) могут применяться без ограничений. Закрытые свойства наследуются и внутри подклассов являются видимыми. В других языках программирования свойства с подобным поведением нередко называются защищенными (protected).
Поведение свойств
Со свойствами автоматически связано несколько методов, Эти методы не создаются простым наследованием. Каждое свойство наследует свой набор методов от двух различных источников:
· От класса – в зависимости от вида свойства – наследуется общее поведение. Это, например, методы Get(), Set(), а также методы проверки.
· От класса типа данных – в зависимости от класса типа данных наследуется поведение, зависящее от типа данных. Многие из этих методов являются генераторами методов, которые, например, позволяют задать минимальное и максимальное значение свойства целочисленного типа.
Все классы, наследуют свое поведение от системных классов. Для пользовательских типов данных поведение, унаследованное от системных классов, может быть переопределено.
Ключевые слова
Можно изменять определение свойства, используя одно или несколько ключевых слов. Все ключевые слова являются необязательными и имеют значение по умолчанию, если ключевое слово явно не задано.
Используются следующие ключевые слова:
· Calculated – задает вычисляемое свойство, которое не сохраняется. Подклассы наследуют это ключевое свойство и не могут его перекрывать.
· Description – описание свойства, которое Caché использует для построения документации класса. Подклассами не наследуется.
· Final – свойство, которое не может перекрываться в подклассах. По умолчанию, свойства не являются финальными. Наследуется подклассами.
· InitialExpression – задает начальное значение для свойства. По умолчанию свойство не имеет начального значения. Наследуется подклассами и может перекрываться.
· Private – задает свойство типа private. По умолчанию, свойства не является private. Наследуется подклассами и не может перекрываться.
· Required – свойство должно получить значение перед сохранением на диске. По умолчанию свойства не являются required. Наследуется подклассами и может перекрываться.
· Transient – определяет временное свойство, которое не сохраняется в базе данных.По умолчанию свойства не являются transient. Наследуется подклассами и не может перекрываться.
· Type – задает имя класса, ассоциированного со свойством, это может быть класс типа данных, хранимый или встроенный класс. По умолчанию это строка (%String). Наследуется подклассами.
Виды свойств
Существует несколько видов свойств:
· Свойства типов данных
· Свойства ссылки на объекты
· Встроенные объекты
· Потоки данных
· Многомерные свойства
· Свойства коллекции
Хранение свойств
Объектная модель Cache дает пользователю возможность управлять хранением значений свойств объектов. По умолчанию, значение каждого свойства — будь то константа, встроенный объект либо ссылка на хранимый объект — хранится как часть представления объекта в базе данных, но в равной степени является и частью представления объекта в памяти. В базе данных значение представляется в формате базы данных (storage value), а в памяти — во внутреннем формате (logical value). Обе эти формы, как правило, идентичны. Однако представление экземпляра объекта в базе данных может полностью отличаться от представления в памяти. Посредством использования различных ключевых слов, определенных для свойств, можно воздействовать на оба эти формата представления значений свойств.
Временные свойства
Отдельные свойства хранимых классов могут быть объявлены как временные (transient); тогда они, в отличие от других свойств, не заносятся в базу данных при сохранении экземпляра объекта. Как правило, подобные временные свойства оказываются полезны в тех случаях, когда необходимо промежуточное хранение временных значений, которые используются лишь во время работы с объектом. Разумеется, для этой цели можно было бы воспользоваться и локальными переменными, однако тогда эти свойства не ставились бы автоматически в соответствие конкретным экземплярам объектов. Вычисляемые свойства Можно добиться того, чтобы свойство вычислялось только во время выполнения, если объявить его как вычисляемое (calculated). В этом случае разработчик сам должен предоставить в распоряжение Cache соответствующий метод Get(). Например, можно определить свойство Age, не имеющее хранимого значения, при каждом обращении к которому будет вычисляться текущий возраст лица, исходя из даты его рождения и сегодняшней даты. Тогда это свойство должно обладать методом AgeGet(), производящим соответствующие вычисления.
|