nsutextbook (1037554), страница 11
Текст из файла (страница 11)
Видимость свойствСвойства могут быть определены как открытые(public) или закрытые (private). Закрытое свойство может использоваться только методами класса, к которому относится.Открытые свойства могут использоваться без ограничений. Закрытые свойства наследуются и внутри подклассов являются видимыми. В других языках программирования свойства с подобным поведением известны как «защищенные».5.5.2. Поведение свойствСо свойствами автоматически связано несколько методов, Эти методы не создаютсяпростым наследованием.
Каждое свойство наследует свой набор методов от двух различных источников:• От класса – в зависимости от вида свойства – наследуется общее поведение. Это,например, методы Get(), Set(), а также методы проверки.• От класса типа данных – в зависимости от класса типа данных наследуется поведение, зависящее от типа данных. Многие из этих методов являются генераторами методов, которые, например, позволяют задать минимальное и максимальное значение свойства целочисленного типа.Все классы, наследуют свое поведение от системных классов. Для пользовательскихтипов данных поведение, унаследованное от системных классов, может быть переопределено.5.5.3. Ключевые словаМожно изменять определение свойства, используя одно или несколько ключевыхслов. Все ключевые слова являются необязательными и имеют значение по умолчанию,если ключевое слово явно не задано.
Используются следующие ключевые слова:Calculated – задает вычисляемое свойство, которое не сохраняется. Подклассы наследуют это ключевое свойство и не могут его перекрывать.Description – описание свойства, которое Caché использует для построения документации класса. Подклассами не наследуется.49Final – свойство, которое не может перекрываться в подклассах. По умолчанию,свойства не являются финальными. Наследуется подклассами.InitialExpression – задает начальное значение для свойства.
По умолчанию свойствоне имеет начального значения. Наследуется подклассами и может перекрываться.Private – задает свойство типа private. По умолчанию, свойства не является private.Наследуется подклассами и не может перекрываться.Required – свойство должно получить значение перед сохранением на диске. Поумолчанию свойства не являются required. Наследуется подклассами и может перекрываться.Transient – определяет временное свойство, которое не сохраняется в базе данных.По умолчанию свойства не являются transient. Наследуется подклассами и не может перекрываться.Type – задает имя класса, ассоциированного со свойством, это может быть класс типа данных, хранимый или встроенный класс.
По умолчанию это строка (%String). Наследуется подклассами.5.5.4. Виды свойствСуществует несколько видов свойств:• Свойства типов данных• Свойства ссылки на объекты• Встроенные объекты• Потоки данных• Многомерные свойства• Свойства коллекции5.5.5. Свойства типов данныхСамый простой тип свойств это свойства типов данных. Это литеральные значения,чье поведение задается классом типа данных, ассоциированным со свойством. Например:Property Count As %Integer;Где Count имя свойства, %Integer – тип данных, ассоциированный со свойством.При задании свойства можно использовать параметр, например:Property Count As %Integer(MAXVAL = 100);Являясь особой формой классов, типы данных имеют принципиальные отличия отклассов объектов:• от классов типов данных невозможно образование экземпляров;• классы типов данных не могут содержать свойств;• методы классов типов данных предоставляются программисту через интерфейс типов данных.Классы типов данных обладают следующими функциональными возможностями:• Отвечают за проверку значений, которая в дальнейшем может конкретизироваться с помощью параметров классов типов данных• Они определяют преобразования между форматом хранения (в базе данных),логическим (в памяти) и форматом отображения значений.• Обеспечивают взаимодействие с SQL, ODBC, ActiveX и Java, предоставляя вих распоряжение необходимые в каждом случае операции и методы преобразования данных.Классы типов данных, поддерживаемые Caché приведены в табл.
8.Таблица 850Тип данных%Binary%Boolean%CurrencyНазначениеДвоичное значениеЛогическое значение(0- ложь, 1- истина)Валюта%DateДатаформат)%FloatЧислоточкой%IntegerАналогичный SQL-типBINARY,BINARYRAW, VBINARYVARYING,Не определенMONEY, SMALLMONEY(внутреннийсплавающейЦелое числоDATEDOUBLE, DOUBLEFLOAT, REALPRECISION,BIT, INT, INTEGER, SMALLINT,TINYINT%ListДанные в формате $List,специфическомдляCachéне определен%NameИмя в формате “ Фамилия.Имя”не определен%NumericЧисло с фиксированDEC, DECIMAL, NUMBER, NUной точкойMERIC%Status%String%Time%TimeStampКод ошибкиСтрока символовне определенCHAR, CHAR VARYING, CHARACTER, CHARACTER VARYING,NATIONAL CHAR, NATIONAL CHARVARYING, NATIONAL CHARACTER,NATIONAL CHARACTER VARYING,NATIONAL VARCHAR, NCHAR,NVARCHAR,VARCHAR,VARCHAR2Время во внутреннемпредставленииTIMEОтметка времени, состоящая из даты и времениTIMESTAMP5.5.6.
ПараметрыКлассы типов данных поддерживают различные параметры, которые меняются оттипа к типу и выполняют различные действия. Примеры параметров:MAXLEN — задает максимальное число символов, которое может содержать строка;MAXVAL — задает максимальное значение;MINLEN —. задает минимальное число символов, которое может содержать строка;MINVAL — задает минимальное значение;51FORMAT — задает формат отображения. Значение параметра соответствует опцииформатирования функции $FNUMBER, которая выполняет форматирование.SCALE — определяет число цифр после десятичной точки.PATTERN — задает шаблон, которому должна соответствовать строка.
Значение параметра PATTERN должно быть правильным выражением шаблона Caché.TRUNCATE — если значение равно 1, то строка символов должна обрезаться додлины, указанной в параметре MAXLEN (умолчание), если равно 0, то нет.ODBCDELIMITER — задает символ-разделитель в списке %List, когда он передается через ODBC.VALUELIST – задает список значений для перечислимых свойств.DISPLAYLIST – определяет дополнительный список значений перечислимого свойства, задает формат отображения для перечислимого свойства, используется вместе с параметром VALUELIST.В табл.9 приведены параметры, поддерживаемые каждым классом типов данных.Таблица 9Класс типа данных%BinaryПоддерживаемые параметрыMAXLEN, MINLEN%Boolean%CurrencyDISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST%DateDISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST%FloatDISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE,VALUELIST, XSDTYPE%IntegerDISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST, XSDTYPE%ListODBCDELIMITER%NameCOLLATION, INDEXSUBSCRIPTS, MAXLEN, XSDTYPE%NumericDISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE,VALUELIST%Status%StringCOLLATION, DISPLAYLIST, MAXLEN, MINLEN, PATTERN, TRUNCATE, VALUELIST, XSDTYPE%TimeDISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST%TimeStampDISPLAYLIST, MAXVAL, MINVAL, VALUELIST5.5.7.
Форматы данных и методы преобразования классов типов данныхОперируя с константами, Caché распознает различные форматы данных. В табл. 10содержится их обзор.52Таблица 10Формат данныхDisplayLogicalНазначениеФормат отображения данныхФормат внутреннего представления данных в оперативной памятиStorageФормат хранения данныхODBCФормат представления данных для ODBC и SQLСуществуют методы для преобразования форматов, представленные в следующейтаблице:Таблица 11МетодНазначениеDisplayToLogical() Преобразует отображаемые значения во внутренний форматLogicalToDisplayПреобразует значение из внутреннего формата в формат ото()браженияLogicalToODBC() Преобразует значение из внутреннего формата в формат ODBC(опциональный метод)ODBCToLogical() Преобразует значение из формата ODBC во внутренний формат(опциональный метод)LogicaToStorage() Преобразует значение из внутреннего формата в формат базыданных (опциональный метод)StorageToLogical() Преобразует значение из формата базы данных во внутреннийформат (опциональный метод)Эти методы служат основой для создания методов свойств в соответствующих классах.
В качестве примера рассмотрим класс Person со свойством DateOfBirth типа данных%Library.Date. Тогда для класса Person Caché будет автоматически создавать методыDateOfBirthDisplayToLogical(), DateOfBirthLogicalToDisplay() и т.д. и применять их длясоответствующих преобразований.5.5.8. Свойства ссылки на объектыВ Caché каждый класс можно рассматривать и как тип данных. Если при определении свойства вместо класса типа данных указать хранимый класс, тем самым будет образована ссылка на хранимый объект.В этом случае значениями свойства будут ссылки на экземпляры соответствующегокласса.