Структура пакетов
PL/SQL позволяет объединить логически связанные типы, программные объекты и подпрограммы в пакет. В любом пакете можно легко разобраться, а интерфейсы между пакетами являются простыми, ясными и четко определенными, что очень полезно при разработке приложений. Пакеты обычно состоят из двух частей: спецификации и тела. Спецификация – это интерфейс для приложений: здесь объявляются типы, константы, переменные, исключения, курсоры и подпрограммы, которыми можно пользоваться. Тело определяет курсоры и подпрограммы и таким образом реализует спецификацию. В следующем примере «пакетируются» две процедуры по найму служащих:
PACKAGE emp_actions IS -- спецификация пакета PROCEDURE hire_employee (empno NUMBER, ename CHAR,...); PROCEDURE fire_employee (emp_id NUMBER); END emp_actions;
PACKAGE BODY emp_actions IS -- тело пакета PROCEDURE hire_employee (empno NUMBER, ename CHAR,...) IS BEGIN INSERT INTO emp VALUES (empno, ename,...); END hire_employee;
PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM emp WHERE empno = emp_id; END fire_employee; END emp_actions;
Прикладным программам видимы и доступны только объявления в спецификации пакета. Детали реализации в теле пакета скрыты и недоступны. Если имеется процедурное расширение базы данных, пакеты могут быть откомпилированы и занесены в базу данных ORACLE, откуда их содержимым могут совместно пользоваться многие приложения. Когда в первый раз вызывается одна из подпрограмм пакета, в память загружается весь пакет. Поэтому любые последующие вызовы подпрограмм пакета не потребуют обмена с диском. Таким образом, использование пакетов может повысить производительность труда и увеличить эффективность программы. Скрытие информации означает, что видны детали, относящиеся только к данному уровню разработки алгоритма и структуры данных. Скрытие информации обеспечивает независимость решений, принимаемых на верхнем уровне разработки, от деталей разработки нижнего уровня, которые, скорее всего, изменятся. Скрытие информации для алгоритмов реализуется в методе разработки сверху вниз. Когда определяется назначение процедуры нижнего уровня и спецификации ее интерфейса, можно игнорировать детали реализации. Они являются скрытыми для верхних уровней. Например, реализация гипотетической процедуры с именем raise-salary является скрытой. Все, что нужно знать, – это то, что процедура увеличит оклад данного служащего на указанную величину. Любые изменения в определении raise-salary прозрачны для вызывающих программ. Скрытие информации для структур данных реализуется посредством инкапсуляции данных. При разработке набора подпрограмм, обслуживающих структуру данных, они изолируются от пользователей и других разработчиков. Таким образом, другие разработчики знают, как пользоваться подпрограммами, работающими со структурой данных, не представляя точно самой структуры. В пакетах PL/SQL можно указать, являются ли типы, программные объекты и подпрограммы приватными или общедоступными. Таким образом, пакеты навязывают инкапсуляцию данных, предлагая помещать объявления типов в черный ящик. Приватное определение типа является скрытым и недоступным. Если определение изменится, это затронет только пакет (но не вашу прикладную программу), что упрощает сопровождение и совершенствование программ.
|