nsutextbook (1037554), страница 13
Текст из файла (страница 13)
метод финальный.По умолчанию, методы не являются финальными. Ключевое слово Final наследуется подклассами.Private – задает, что данный метод может быть вызван только методами этого жекласса или подклассов ( если метод не является private, тогда ограничений на вызов метода нет). Подклассы наследуют private-методы и могут изменять значение этого ключевого57слова. По умолчанию методы являются public. (Заметим, что другие языки программирования используют слово «protected» для описания такого способа видимости и используют“private” для того, чтобы помешать видимости метода из подклассов).ReturnType – определяет тип возвращаемого значения. Установка ReturnType равным пустой строке (“ ” ), означает, что нет возвращаемого значения.Значение ReturnType наследуется подклассами и может быть изменено в подклассе.По умолчанию, метод не имеет возвращаемого значения.SQLProc – задает метод как хранимую процедуру SQL.
По умолчанию метод не является хранимой процедурой.5.6.8. Методы класса и экземпляровМетоды экземпляров используются, если создан экземпляр объекта. Причем внутриметода сам объект доступен с помощью синтаксиса ##this. Например:set sc= ##this.%Save()В данном примере экземпляр объекта доступен через ##this, %Save – метод экземпляра.Метод класса не относится к конкретному экземпляру. Метод класса вызывается безссылки на объект, поэтому синтаксис ##this в них отсутствует. Свойства и методы экземпляра для них не имеют смысла. Методам класса доступны параметры класса.Примеры методов класса:%New() – создать экземпляр объекта.%OpenId() – открыть существующий экземпляр%DeleteId() – удалить экземпляр в базе данных.5.6.9. Вызов методаДля вызова метода экземпляра сначала нужно создать или открыть экземпляр объекта.
Для выполнения метода используется синтаксис, подобный одной из следующихстрок кода:Do oref.MethodName(arglist)Set value = oref.MethodName(arglist)где oref это ссылка на подходящий объект, который уже находится в памяти,MethodName это имя метода для выполнения, arglist это список аргументов передаваемыхметоду, во второй строке локальной переменной присваивается значение, возвращаемоеметодом.Например, для выполнения метода Admit объекта Patient используется следующийкод:Do pat.Admit()где pat это OREF на желаемый объект Patient.Аналогично, для выполнения метода SearchMedicalHistory объекта Patient используется следующий код:Set result = pat.SearchMedicalHistory("MUMPS")Где pat это OREF-ссылка на желаемый объект Patient и result содержит значение, возвращаемое методом SearchMedicalHistory.Метод класса выполняется без создания экземпляра.
Можно выполнить метод классаиз метода того же класса. В этом случае, можно вызвать метод класса, как если бы вызывался метод экземпляра.Для выполнения метода класса используется следующий синтаксис:Do ##class(Classname).MethodName(arglist)Set value = ##class(Classname).MethodName(arglist)Где Classname это имя класса с подходящим методом, MethodName это имя методавыполнения, arglist это список аргументов, передаваемых методу. Value это переменная,получающая значение, возвращаемое методом.58Имя класса может содержать имя пакета. Например, вызов метода PurgeAll классаReportCard:Do ##class(MyApp.ReportCard).PurgeAll()Где MyApp – это имя пакета.Аналогично, можно выполнить метод Exists класса %File, который определяет, существует ли файл, используя следующий код:Set exists = ##class(%File).Exists("\temp\file.txt")Где exists равно true (1), если файл существует, или false (0), если такого файла нет.5.6.10. Виды методовВ объектной модели Caché различают четыре разновидности методов:• Метод-код• Метод-выражение• Метод-вызов• Генератор методаМетод-код – содержит код, написанный на языке Caché Object Script.
Это простореализация метода в виде строк кода. Этот вид метода является видом по умолчанию. Например, следующий метод определяет код метода Speak для класса Dog:Class MyApp.Dog Extends %Persistent [ClassType = persistent]{Method Speak() As %String{Quit "Woof, Woof"}}Метод-код может содержать любой правильный код на Caché ObjectScript, включаявстроенный SQL и HTML, или код на Basic, в зависимости от ключевого слова. При вызове метода используется ссылка на экземпляр:Write dog.Speak()// выдаст:Woof, WoofМетод-выражение – содержит выражение на языке Caché Object Script. Передачапараметров по ссылке недопустима.
Не может содержать макросы, встроенный SQL,встроенный HTML.При компиляции программы все вызовы метода заменяются этим выражением.Обычно используется для простых методов, которые, например, присутствуют в классахтипов данных, когда требуется быстрая скорость вычисления выражений. Например, можно конвертировать метод Speak класса из предыдущего примера в метод-выражение:Method Speak() As %String [CodeMode = expression]{"Woof, Woof" }Этот метод можно вызывать так:Write dog.Speak()Будет сгенерирован следующий код:Write "Woof, Woof"Неплохо было бы назначить формальным параметрам метода-выражения значенияпо умолчанию. Тогда не нужно было бы их назначать во время выполнения.Замечание: Caché не разрешает использование макросов или вызовов аргументов поссылке внутри методов-выражений.Метод-вызов – вызывает существующую программу Caché. Как правило, такие вызовы используются для того, чтобы инкапсулировать существующий код в объектноориентированный проект.Определение метода как метода-вызова указывает, что при вызове метода вызывается специальная подпрограмма.
Синтаксис метода вызова:Method Call() [ CodeMode = call ]59{Tag^Routine }где “Tag^Routine” задает имя метки Tag внутри подпрограммы Routine.Генераторы методов – особые методы, содержащие код для порождения кода наязыке Caché Object Script. Они используются во время компиляции классов для генерацииверсии метода времени выполнения. При этом они могут обращаться к параметрам классадля выбора подходящего варианта генерации кода.ПараметрыклассаГенераторметодаКод метода5.7. Параметры класса и генераторы методовПараметры класса – это константы, то есть значения, устанавливаемые во время определения класса или в любое другое время перед компиляцией класса. Параметры классаустанавливаются для всех объектов этого класса и могут использоваться в методах класса.Во время выполнения значения параметров класса изменениям не подлежат.Значения параметров класса наследуются и могут перекрываться в производныхклассах, либо пополняться дальнейшими параметрами класса.
Например:Например, класс MyApp.A имеет параметр XYZ со значением 100Class MyApp.A{ Parameter XYZ = 100; }Подкласс MyApp.B может перекрыть значение этого параметра.Class MyApp.B Extends MyApp.A{ Parameter XYZ = 200; }Параметры класса обычно используются при компиляции с участием генераторовметодов. Генератор метода использует параметр класса с целью управления ходом генерации, например для конкретизации поведения типов данных.Параметр класса имеет специальное поведение, когда используется с классами типовданных.
С классом типов данных, параметр класса используется для обеспечения способаизменения поведения типа данных.Например, класс типа данных %Integer имеет параметр класса MAXVAL, которыйопределяет максимальное значение для свойства типа %Integer. Определим класс со свойством NumKids следующим образом:Property NumKids As %Integer (MAXVAL=10);Это означает, что параметр MAXVAL для класса %Integer должен быть установленравным 10 для свойства NumKids.Это работает следующим образом: методы проверки для классов типов данных всереализованы в виде генераторов методов и используют параметры классов для контролягенерации методов. В этом примере, это определение свойства генерирует код методаNumKidsIsValidDT, который проверяет, превышает ли значение свойства NumKids число10. Без использования параметров класса для подобной функциональности потребуетсясоздать определение класса IntegerLessThanTen.У любого зарегистрированного класса имеется параметр класса PROPERTYVALIDATION.
Он указывает должны или нет проверяться значения свойств, и если да, то когдаименно:• 0 – означает отсутствие проверки• 1 – предполагает проверку в момент присваивания значения.• 2 (по умолчанию) – означает проверку при сохранении.При каждом изменении этого параметра, сопровождаемом перекомпиляцией, генераторы методов вставляют соответствующий код проверки значений свойств каждый раз в60подходящее место. Таким образом, параметры класса служат для согласования поведениякласса с конкретными потребностями данного приложения.5.8.
ЗапросыПредоставляют в распоряжение разработчика операции с множествами экземпляровклассов. Можно считать, что запросы образуют для объектов класса некий фильтр.Запросы можно формулировать либо на языке Caché Object Script, либо на SQL. Результат запроса становится доступен через ResultSet – специальный интерфейс для обработки результатов запроса в прикладных программах, написанных на языке Caché ObjectScript, или на любом другом с использованием ActiveX, либо на языке Java. Кроме того,запросы могут быть представлены в виде хранимых процедур SQL или же представлений(View), а значит, далее обрабатываться средствами SQL.5.9. ИндексыИндекс – это не что иное, как путь доступа к экземплярам класса. Индексы используются для оптимизации скорости выполнения запросов.