Здравствуйте,при покупке печатной формы сертификата,будут ли выданы обе печатные сторны? |
Интерфейсы, взаимодействие и изменение программ и данных
8.2.3. Стандарт ISO/IEC 11404-1996 преобразования данных
Цель данного стандарта [8.15] состоит в том, чтобы обеспечить не только описание типов данных в стандартном языке LI (Language Independent) и их генерацию, но и преобразование типов данных ЯП в LI-язык и наоборот. Стандарт предлагает специальные правила ихарактеристические операции генерации примитивных типов данных и объединений LI-языка в более простые структуры данных ЯП, а также определение параметров интерфейса средствами языков IDL, RPC и API.
Независимые отЯП типы данных стандарта разделены на примитивные, агрегатные и сгенерированные (рис. 8.7).
В этот язык также включено семейство и генератор типов данных. Типы данных в стандарте описываются в LI-языке, который является более общим языком, в отличие от конкретных средств описания типов данных ЯП. Он содержит все существующие типы ЯП и общие типы данных, ориентированные на генерацию других типов данных.
Стандарт имеет раздел объявления типов данных, переименования существующих; объявление новых генераторов, значений и результатов. Каждый тип данных имеет шаблон, включающий описание и спецификатор типа данных, значение в пространстве значений, синтаксическое описание и операции над типами данных.
Стандарт состоит из разделов (рис. 8.8): объявление типов данных, объявленные типы данных; объявление новых генераторов (стеков, деревьев). Для объявляемого типа данных задается шаблон, включающий синтаксическое описание, спецификатор типа данных, значение в пространстве значений и операции над типами данных.
Средствами LI описываются параметры вызова, как элементы интерфейса, необходимые при обращении к стандартным сервисам и готовым программным компонентам.
LI-язык стандарта рекомендует следующие виды преобразования данных:
- внешнее преобразование типов данных ЯП в LI-тип данных;
- внутреннее преобразование из LI-типа данных в тип данных ЯП;
- обратное преобразование.
Внешнее преобразование типов данных и генераторов типов данных заключается в следующем:
- для каждого примитивного типа для сгенерированного внешнего типа данных преобразование связывается с одним LI-типом данных;
- для каждого внутреннего типа данных преобразование определяет связь между допустимым значением внутреннего типа данных и эквивалентным значением соответствующего LI-типа данных;
- для каждого значения LI-типа данных, участвующего в преобразовании, определяется существование значения любого внутреннего типа данных, преобразуемого в LI-тип данных с взятием этого значения.
Внешнее преобразование документирует аномалии при идентификации внутренних типов и дает гарантию того, что интерфейс между программными компонентами адекватно задается сервисным средством и игнорирует среду ЯП.
Внутреннее преобразование связывает примитивный тип данных или сгенерированный в LI-тип данных с конкретным внутренним типом данных ЯП. Представители отдельного семейства LI-типа данных могут преобразовываться в различные внутренние типы данных ЯП. Данное преобразование обладает следующими свойствами:
- для каждого LI-типа данных (примитивного или сгенерированного) преобразование определяет наличие этого типа данных в ЯП;
- для каждого LI-типа данных преобразование определяет отношение между допустимым значением этого типа и эквивалентным значением соответствующего внутреннего типа ЯП;
- для каждого значения внутреннего типа данных преобразование определяет, является ли это значение образом (после преобразования) какогото значения LI-типа данных и его способ преобразования.
Обратное внутреннее преобразование для LI-типа данных состоит в преобразовании значений внутреннего типа данных в соответствующее значение LI-типа при наличии соответствия и отсутствия двусмысленности. Это преобразование для ЯП является коллекцией обратных внутренних преобразований LI-типа данных.
В стандарте имеется набор приложений.
В "Малая энциклопедия инструментов ООП" приведен перечень действующих стандартов (около 40), определяющих наборы символов. Для обеспечения совместимости используемых и реализуемых типов данных в "Словарь терминов программной инженерии" содержатся рекомендации по идентификации типов данных и описанию аннотаций для атрибутов, параметров и др.
В "Перечень стандартов программной инженерии" приведены рекомендации по соответствующим внутренним типам данных, которые должны преобразовываться LI-типы данных. В "Малая энциклопедия инструментов ООП" показано, что синтаксис LI-языка является подмножеством стандарта IDM (Interface Definition Notation), предназначенного для описания интерфейса в LI-языке. Приведен вариант внутреннего преобразования LI-типов данных в типы данных ЯП Паскаль (ISO/IEC 7185-90). В нем рассмотрены примеры преобразования примитивных типов данных LI-языка (логический, перечислимый, символьный, целый рациональный и др. ) в типы данных языка Паскаль.
Предложенные в стандарте рекомендации, а также средства описания типов данных и методов их преобразования - универсальны. Программной поддержки стандарта пока отсутствует.
8.3. Интерфейс платформ и преобразование данных
8.3.1. Преобразование форматов данных
Программы, расположенные на разных типах компьютеров, передают друг другу данные через протоколы, их форматы преобразуется к формату данных принимающей серверной платформы (так называемый маршалинг данных) с учетом порядка и стратегии выравнивания, принятой на этой платформе. Демаршалинг данных - это обратное преобразование данных (т. е. полученного результата) к виду передавшей клиентской программы. Если среди передаваемых параметров оператора вызова содержатся нерелевантные типы или структуры данных, которые не соответствуют параметрам вызванного объекта, то производится прямое и обратное их преобразование средствами ЯП или стандарта [8.2, 8.11].
К средствам преобразования данных и их форматов относятся:
- стандарты кодировки данных (XDR - eXternal Data Representation, CDR - Common Representation Data [8.8]), NDR - Net Data Representation) и методы их преобразования;
- ЯП и механизмы обращения компонентов друг к другу;
- языки описания интерфейсов компонентов - RPC, IDL и RMI для передачи данных между разными компонентами.
На каждой платформе компьютера используются соглашения о кодировке символов (например, ASCII), о форматах целых чисел и чисел с плавающей точкой (например, IEEE, VAX и др. ). Для представления целых типов, как правило, используется дополнительный код, а для типов float и double-стандарт ANSI/IEEE и др. Порядок расположения байтов зависит от структуры платформы (Big Endian или Little Endian) и от старшего к младшему байту и от младшего байта к старшему. Процессоры UltraSPARC и PowerPC поддерживают обе возможности. При передаче данных с одной платформы на другую учитывается возможное несовпадение порядка байтов. Маршаллинг данных поддерживается несколькими стандартами, некоторые из них рассмотрим ниже.
XDR-стандарт содержит язык описания структур данных произвольной сложности и средства преобразования данных, передаваемых на платформы (Sun, VAX, IBM и др. ). Программы, написанные в ЯП, могут использовать данные в XDR-формате, несмотря на то, что компиляторы выравнивают их в памяти машины поразному.
В XDR-стандарте целые числа с порядком "от младшего" приводятся к порядку байтов "от старшего" и обратно. Преобразование данных - это кодирование (code) или декодирование (decode) XDR-процедурами форматирования простых и сложных типов данных. Кодирование - это преобразование из локального представления в XDR-представление и запись в XDR-блок. Декодирование - это чтение данных из XDR-блока и преобразование в локальное представление заданной платформы.
Выравнивание данных - это размещение значений базовых типов с адреса, кратного действительному размеру в байтах (2, 4, 8, 16). Границы данных выравниваются по наибольшей длине (например, 16). Системные процедуры оптимизируют расположение полей памяти под сложные структуры данных и преобразуют их к формату принимающей платформы. Обработанные данные декодируются обратно к виду формата платформы, отправившей эти данные.
CDR-cтандарт среды CORBA обеспечивает преобразование данных в форматы передающей и принимающей платформ. Маршаллинг данных выполняет интерпретатор TypeCode и брокер ORB. Процедуры преобразования сложных типов включают в себя:
- дополнительные коды для представления целых чисел и чисел с плавающей точкой (стандарт ANSI/IEEE);
- схему выравнивания значений базовых типов в среде компилятора;
- базовые типы ( signed и unsigned ) в IDL, а также плавающий тип двойной точности и др.
Преобразование данных выполняются процедурами encoder() и decoder() интерпретатора TypeCode, который используют базовые примитивы при выравнивании информации и помещения ее в буфер. Для сложного типа вычисляется размер и границы выравнивания, а также их размещение в таблице с индексами значений TCKind, используемых при инициализации брокера ORB.
ХМL-стандарт обеспечивает устранение неоднородности во взаимосвязях компонентов в разных ЯП с помощью XML-формата данных, который учитываются разные платформ и среды. Промежуточные среды (CORBA, DCOM, JAVA и др. ) имеют в своем составе специальные функции, аналогичные XML - альтернатива сервисам CORBA в плане обеспечения взаимосвязей разноязыковых программ.
XML имеет различные системные поддержки: браузер - Internet Explorer для визуализации XML-документов, объектная модель DOM (Document Object Model) для отображения XML-документов и интерфейс IDL в системе CORBA.
Тексты в XML-стандарте описываются в формате ASCII, что дает возможность более эффективно применять их при обмене данными. XML используется для кодирования типов данных с помощью файловых форматов. При необходимости перехода программной системы к XML-стандарту проводится переформатирование данных системы в формат XML и наоборот.
Таким образом, XML-язык позволяет представлять объекты для разных объектных моделей на единой концептуальной, синтаксической и семантической основе. Он не зависит от платформы и среды модели взаимодействия компонентов прикладного уровня. XML упрощает обработку документов, работу с БД с помощью стандартных методов и средств (XML-парсеры, DOM-интерфейсы, XSL-отображение XML в HTML и др. ).