Разработка объектов и их методов



Пакеты

Прежде чем заняться определением классов, обсудим пакеты, используемые в Caché для группирования родственных классов. Например, приложение может иметь систему счетов: "Accounting" и систему вложений: "Inventory". Классы, реализованные в этом приложении, могут быть организованы в пакеты "Accounting" и "Inventory".

На каждый из этих классов можно ссылаться, используя его полное имя, которое состоит из имени пакета и имени класса:

Do ##class(Accounting.Invoice).Method()

Do ##class(Inventory.Item).Method()

Если имя пакета может быть определено из контекста, то имя пакета может бытьопущено:

Do ##class(Invoice).Method()

Пакет это просто соглашение об именах: он не обеспечивает никакой другой функциональности, кроме именования класса. Так же как и класс, определение пакета существует внутри рабочей области Caché. Рабочая область Caché это логическое представление данных, как правило, одной базы данных.

 

Имя пакета

Имя пакета это просто строка. Оно может содержать точку «.», но больше никакой другой пунктуации. Например, полное имя класса «Test.Subtest.TestClass» означает, что «TestClass» это имя класса, а «Test.Subtest» это имя пакета. В схеме базы данных в SQL имя будет преобразовано к виду: «Test_TestClass».

Существует несколько ограничений на длину и использование имен пакетов:

· Имя не более 31 символа, включая точку, но различаются только первые 25 символов.

· Внутри области, имя каждого пакета должно быть уникально.

Определение пакетов

Пакеты подразумеваются при именовании классов. Самый простой способ создания пакета – задать его имя при создании нового класса в Caché Studio с использованием мастера, в котором также можно просмотреть список всех пакетов. При удалении последнего класса пакета, сам пакет автоматически удаляется. Пакет можно указать при программном создании класса.
Например:

Class Accounting.Invoice { ... }

Класс Invoice внутри пакета "Accounting".

Используя Caché Studio, можно просматривать и редактировать дополнительные характеристики пакетов, такие как его описание, щелкнув правой кнопкой мыши на имени пакета в окне проекта и выбрав меню «Информация о пакете».

 

Использование пакетов

Существует два пути использования имени класса:

· Использование полного имени класса вместе с именем пакета. Например: пакет.класс

· Использование короткого имени класса, позволив компилятору классов самому решать какому пакету будет принадлежать класс.

Пример использования полного имени:

// создатьэкземплярLab.Patient

Set patient = ##class(Lab.Patient).%New()

Для того, чтобы компилятор сам мог решать к какому имени будет принадлежать класс, необходима директива #IMPORT в коде .MAC или внутри определения класса. Если такой директивы нет, то имя класса будет ассоциировано с пакетом "User" или "%Library".
Например:

// созданиеэкземпляракласса Person

Set person = ##class(Person).%New()

// этотожесамое, чтои

Set person = ##class(User.Person).%New()

Директива #IMPORT

Директива #IMPORT позволяет задавать пакет, где следует искать класс.
Например:

#import Lab
// Класс "Patient" внутрипакета Lab

Set patient = ##class(Patient).%New()

Можно использовать несколько директив #IMPORT внутри программы MAC:

#import Lab

#import Accounting

// Поисккласса "Patient" внутрипакетов Lab &Аccounting
Set pat = ##class(Patient).%OpenId(1)

// Поисккласса "Invoice" внутрипакетов Lab & AccountingSet inv = ##class(Invoice).%OpenId(1)

Порядок следования директив #IMPORT не имеет значения и может привести к ошибке в случае двусмысленного использования. Например, если имеется одно и то же имя класса в двух разных пакетах, заданных директивой #IMPORT. Чтобы избежать этого используйте полное имя класса. Директива IMPORT определяет, какой пакет используется для разрешения ссылки внутри определения класса. Если директива не размещена, то предполагается использование следующего кода:

#import User

Если одна директива уже определена, то директива с User автоматически не подставляется, нужно написать:

#import MyPackage
#import User

ПакетыиSQL

Каждый пакет соответствует SQL схеме. Например, если класс называется Team.Player (класс Player в пакете "Team"), соответствующая таблица называется "Team.Player" ( таблица Player в схеме "Team").
Пакет по умолчанию "User" соответствует схеме "SQLUser". Следовательно, класс с именем User.Person соответствует таблице с именем SQLUser.Person.

Если имя пакета содержит точку, то она заменяется подчерком. Например: класс MyTest.Test.MyClass (класс MyClass, пакет "MyTest.Test") становится таблицей MyTest_Test.MyClass (MyClass – таблица, "MyTest_Test" – схема).

Схема по умолчанию SQLUser. Например:

Select ID, Name from Person

// Тожесамоечтои:


Дата добавления: 2018-05-12; просмотров: 222; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!