В данной лекции рассматриваются базовые понятия программной инженерии - интерфейсы, средства их представления, взаимодействие разноязыковых программ и преобразование типов данных. Представлены подходы к обеспечению интерфейсов программ, записанных в разных языках программирования (ЯП), методы преобразования неэквивалентных типов данных при взаимодействии модулей и программ.
Определены общие задачи неоднородности ЯП, платформ и сред, влияющих на установление связей между разноязыковыми программами, сформулированы пути их решения. Рассмотрены рекомендации стандарта ISO/IEC 11404-1996 по обеспечению независимых от современных ЯП типов данных.
Рассмотрены подходы к
Общее определение. Интерфейс - это связь двух отдельных сущностей. Виды интерфейсов: языковые, программные, аппаратные, пользовательские, цифровые и т. п. Программный (API) и/или аппаратный интерфейс (port) - это способы преобразования входных/выходных данных во время объединения компьютера с периферийным оборудованием. В ЯП - это программа или часть программы, в которой определяются константы, переменные, параметры и структуры данных для передачи другим.
В программировании термин интерфейс олицетворяет собой набор операций, обеспечивающих определение видов услуг и способов их получения от программного объекта, предоставляющего эти услуги. На начальном этапе программирования в роли интерфейса выступают операторы обращения к ее процедурам и функциям программ через формальные параметры. Программы, процедуры и функции записывались в одном ЯП. Операторы обращения включали имена вызываемых объектов (процедур и функций) и список фактических параметров, задающих значения формальным параметрам и получаемым результатам. Последовательность и число формальных параметров соответствовало фактическим параметрам. Выполнение функции в среде программы на одном ЯП не вызывало проблем, так как типы данных параметров совпадали.
В случае, когда один из элементов (программа, процедура или функция) записаны на разных ЯП и, кроме того,
если они располагаются на разных компьютерах, то возникают проблемы неоднородности типов данных в этих ЯП,
структур памяти платформ компьютеров и операционных сред, где они выполняются.
Понятие интерфейса, как самостоятельного объекта, сформировалось в связи со сборкой или объединением разноязыковых программ и модулей в монолитную систему на больших ЭВМ (
(рис 8.1) Схема вызова модулей А и В из С через интерфейсы А'и B'Интерфейс играл роль посредника между вызываемым и вызывающим модулями. В нем давалось описание формальных и фактических параметров, производилась проверка соответствия передаваемых параметров (количества и порядка расположения), а также их типов данных. Если типы данных параметров оказывались не релевантными (например, передается целое, а результат функции - вещественное или наоборот), то производилось прямое и обратное их преобразование с учетом структуры памяти компьютеров. На рис. 8.1 приведена схема программы $$C$$, в которой содержатся два вызова - $$Call\;A()$$ и $$Call\;B()$$ с параметрами, которые через интерфейсные модули-посредники $$A^\prime$$ и $$B^\prime$$ производят преобразование данных и их передачу модулям $$А$$ и $$В$$. После выполнения $$А$$ и $$В$$ результаты преобразуются обратно к виду программы $$С$$.
Интерфейс в ООП.В ООП главным элементом является класс, включающий множество объектов с одинаковыми свойствами, операциями и отношениями. Класс имеет внутреннее (реализацию) и внешнее представление - интерфейс (табл. 8.1).
| Класс | |
|---|---|
| Внешнее представление | Внутреннее представление |
| Интерфейсные операции: |
Реализация операций класса, определение поведения. |
Интерфейс содержит множество операций, описывающих его поведение. Класс может поддерживать несколько интерфейсов, каждый из которых содержит операции и сигналы, используются для задания услуг класса или программного компонента. Интерфейс именует множество операций или определяет их сигнатуру и результирующие действия. Если интерфейс реализуется с помощью класса, то он наследует все его операции. Одни и те же операции могут появляться в различных интерфейсах. Если их сигнатуры совпадают, то они задают одну и ту же операцию, соответствующую поведению системы. Класс может реализовывать другой класс через интерфейс.
Операции и сигналы могут быть связаны отношениями обобщения. Интерфейс-потомок включает в себя все операции и сигналы своих предков и может добавлять собственные путем наследования всех операций прямого предка, т.е. его реализацию можно рассматривать как наследование поведения.
Новое толкование интерфейса объектов дано в работе П.Вегнера [8.3], который сформулировал парадигму перехода от алгоритмоввычислений к взаимодействию объектов. Суть этой парадигмы заключалась в том, что вычисление и взаимодействие объектов рассматривались как две ортогональные концепции. Взаимодействие - это некоторое действие ( $$action$$ ), но не вычисление, а сообщение - не алгоритм, а действие, ответ на которое зависит от последовательности операций ( $$Op$$ ), влияющих на состоянии разделенной ( $$shared\; state$$, $$ss$$ ) памяти локальной программы (рис. 8.3). Операции интерфейса ( $$Op1$$ и $$Op2$$ ) относятся к классу неалгоритмических и обеспечивают взаимодействие объектов через сообщения.
(рис 8.3) Интерфейс взаимодействия через операции интерфейса (по Вегнеру)Вегнер рассматривает модель взаимодействия, как обобщение машины Тьюринга - распределенной интерактивной модели взаимодействия объектов с входными (input) и выходными (output) действиями и возможностью продвижения в ней потенциально бесконечного входного потока (запросов, пакетов) в заданном интервале времени.
Дальнейшим развитием идеи взаимодействия, основанного на действиях, является язык AL (Action language), обеспечиывющий вызовов процедур (локальных или распределенных) с разверткой каждого вызова в программу [8.4], состоящую из операторов действий. Программа из вызовов процедур рассматривается в AL как ограниченное множество конечных программ, взаимодействующих со средой, в которую они погружаются.
Интерфейс в современных средах и сетях.Появление разных компьютеров и их объединение в локальные и глобальные сети привело к уточнению понятия интерфейса как удаленного вызова (сообщения) программ, расположенных в разных узлах сети или среды и получающих входные данные из сообщений.
Сети строятся на основе стандартной семиуровневой модели открытых систем OSI (Open Systems Interconnection) [8.5]. Объекты уровней в этой модели связываются между собой по горизонтали и вертикали. Запросы от приложений поступают на
Доступ к услугам осуществляется с помощью разных механизмов:
RPC- вызов задает интерфейс удаленным программам в языках высокого или низкого уровней. Язык высокого уровня служит для задания в RPC-вызове параметров удаленной процедуры, которые передаются ей через сетевое сообщение.
Взаимосвязь процесса с удаленно расположенным от него другим процессом (например, сервером) на другом компьютере выполняет протокол UDP или TCP/IP, который передает параметры в
Механизм посылки запроса в системе CORBA базируется на описании запроса в языке IDL для доступа к удаленному методу/функции через протокол
Вызов метода RMI в системе JAVA выполняет виртуальная машина (virtual machine), которая интерпретирует byte-коды вызванной программы, созданные разными системами программирования ЯП (JAVA, Pascal, С++) на разных компьютерах и средах. Функции RMI аналогичны брокеру
В распределенной среде реализуется два способа связывания: на уровне ЯП через интерфейсы прикладного программирования и компиляторов IDL, генерирующих клиентские и серверные Stab. Интерфейсы определяются в языках IDL или
Интерфейс в IDL или в API включает описание формальных и фактических параметров программ, их типов и порядка задания операций передачи параметров и результатов при их взаимодействии. Это описание есть не что иное, как спецификация интерфейсного посредника двух разноязыковых программ (аналогично, как на рис. 8.1), которые взаимодействуют друг с другом через механизм вызова интерфейсных функций или посредников двух типов программ (клиент и сервер), выполняемых на разных процессах.
В функции интерфейсного посредника клиента входят:
Общие функции интерфейсного посредника сервера состоят в следующем:
Описание интерфейсного посредника не зависит от ЯП взаимодействующих объектов и в целом одинаково для всех вызывающих и вызываемых объектов. Посредник описывается в языке спецификации интерфейса IDL.
Интерфейсные посредники задают связь между клиентом и сервером (
Под интероперабельностью понимается способность совместного, согласованного взаимодействия разнородных компонентов системы для решения определенной задачи.
К средствам обеспечения интероперабельности и передачи данных между разными средами и платформами относится, например, стандартный механизм связи между JAVA и C/C++ компонентами, основанный на применении концепции Java Native Interface (
Эти средства включает в себя анализ JAVA-классов в целях поиска прототипов обращений к функциям, реализованных на языках C/C++, и генерацию заголовочных файлов для использования их при компиляции C/C++ программ. В средстве JAVA классу известно, что в нем содержится обращение не к JAVA-методу (он называется $$native$$ и для загрузки необходимых C/C++ библиотек добавляется вызов функции), ориентируется именно на такую связь. Данная схема действует в одном направлении - от JAVA к C/C++ и только для такой комбинации ЯП.
Еще вариант реализации аналогичной задачи предлагает технология Bridge2Java,которая обеспечивает обращение из JAVA- классов к COM-компонентам. В этих целях генерируется оболочка для COM-компонента, который включает прокси-класс, обеспечивает необходимое преобразование данных средствами стандартной библиотеки преобразований типов. Данная схема не требует изменений в исходном Java-классе и COM-компоненты могут быть написаны в разных языках.
Механизм интероперабельности реализован также на платформе . Net с помощью языка CLR (Common Language Runtime). В этот язык транслируются коды, написанные в разных ЯП (C#, Visual Basic, C++, Jscript). CLR разрешает не только интегрировать компоненты, разработанные в разных ЯП, а и использовать библиотеку стандартных классов независимо от языка реализации.
Такой подход позволяет реализовать доступ к компонентам, которые были разработаны раньше без ориентации на платформу . Net, например к COM-компонентам. Для этого используются стандартные средства генерации оболочки для COM-компонента, с помощью которой он представляется как . Net-компонент. При такой схеме реализуются все виды связей и для любых ЯП данной среды.
Основные ЯП, используемые для описания компонентов в современных средах, это С++, Паскаль, JAVA и др. [8.2, 8.12, 8.13].
Разноязыковые программы, записанные в этих языках, обращаются друг к другу через удаленный вызов, который предполагает взаимно однозначное соответствие между фактическими параметрами $$V = \{v^{1}, v^{2}, \dots, v^{к}\}$$ вызывающей программы и формальными параметрами $$F = \{f^{1}, f^{2}, \dots, f^{к1}\}$$ вызываемой программы. При неоднородности одного из параметров из множества формальных или фактических параметров разноязыковых программ необходимо провести отображение (mapping) неэквивалентного типа данных параметра в одном ЯП в соответствующий тип данных в другом ЯП.
Аналогично решается задача преобразования неэквивалентных типов данных в ЯП. Представим это преобразование такими этапами.
Этап 1. Построение операций преобразования типов данных $$T_{\alpha} = \{T_{\alpha}^{t}\}$$ для множества языков программирования $$L = \{ l_{\alpha} \}_{\alpha=1, n}$$.
Этап 2.Построение отображения простых типов данных для каждой пары взаимодействующих компонентов в $$l_{\alpha1}$$ и $$l_{\alpha2}$$, а также применение операций селектора $$S$$ и конструктора $$С$$ для отображения сложных структур данных в этих языках. Один из способов формализованного преобразования типов данных - создание алгебраических систем для каждого типа данных $$T_{\alpha}^{t}$$:
$$G_{\alpha}^{t} = < X_{\alpha}^{t},\Omega_{\alpha}^{t} >,$$где $$t$$ - тип данных, $$X_{\alpha}^{t}$$ - множество значений, которые могут принимать переменные этого типа данных, $$\Omega_{\alpha}^{t}$$ - множество операций над этими типами данных.
В качестве простых типов данных современных ЯП могут быть $$t = b (bool), c (char), i (int), r (real)$$.
Каждый элемент класса простых и
$$G_{\alpha}^{t} = < X_{\alpha}^{t},\Omega_{\alpha}^{t} > $$, где $$t = b, c, i, r, a, z, u, e$$.
Операциям преобразования каждого $$t$$ типа данных соответствует изоморфное отображение двух алгебраических систем с совместимыми типами данных двух разных языков. В классе систем (8.1) преобразование типов данных $$t \to q$$ для пары языков $$l_{t}$$ и $$l_{q}$$ обладает такими свойствами отображений:
Отображения 1, 2 сохраняют линейный порядок элементов, поскольку
Системы программирования с ЯП имеют следующие особенности компилирования программ:
Связь между различными языками $$L_{1}, \dots, L_{n}$$ осуществляется через интерфейс пары языков $$L_{i}$$, $$L_{n}$$, взаимодействующих между собой в среде, генерирующей соответствующие конструкции $$L_{i}$$ в операции описания интерфейса и наоборот.
Взаимодействие ЯП в среде CORBA.Принцип взаимодействия объектов в среде CORBA состоит в том, что любой объект выполняет метод (функцию, сервис, операцию) при условии, если другой объект, выступающий в роли клиента для него, посылает ему запрос для выполнения этого метода. Объект выполняет метод через интерфейс.
Взаимодействие ЯП в системе CORBA состоит в отображении типов объектов в типы клиентских и серверных стабов путем
Так как ЯП системы CORBA могут быть реализованы на разных платформах и в разных средах, то их двоичное представление зависит от конкретной аппаратной платформы [8.2, 8.7, 8.8]. Для всех ЯПсистемы CORBA (С++, JAVA, Smalltalk, Visual C++, COBOL, Ada-95) предусмотрен общий механизм связи и расположения параметров методов объектов в промежуточном слое. Связь между объектными моделями каждого ЯП системы СОМ и JAVA выполняет брокер
(рис 8.4) Интегрированная среда системы CORBAЕсли в общую объектную модель CORBA входит объектная модель СОМ, то в ней типы данных определяются статически, а конструирование
В случае вхождения в состав модели CORBA объектной модели JAVA/RMI, вызов удаленного метода объекта осуществляется ссылками на объекты, задаваемые указателями на адреса памяти.
Интерфейс как объектный тип реализуется классами и предоставляет удаленный доступ к нему сервера. Компилятор JAVA создает байткод, который интерпретируется виртуальной машиной, обеспечивающей переносимость байткодов и однородность представления данных на всех платформах среды СORBA.
Проблеме взаимодействия разноязыковых программ на множестве современных языков (C/C++, Visual C++, Visual Basic, Matlab,Smalltalk, Lava, LabView, Perl) посвящена работа [8.14]. В ней представлены различные варианты и конкретные примеры связей каждой пары ЯП из этого множества с помощью практически реализованных и приведенных функций преобразования, методов обращения к ним из программ на одном языке к программе на другом языке. В таблице 8.1. приведены варианты взаимосвязи разных ЯП.
В ней отражены особенности их взаимодействия через разные виды интерфейсов, приведены более 25 видов пар современных ЯП и соответственно прямого и обратного взаимодействия разноязыковых программ.
Для этих пар ЯП изложены принципы запуска разных программ и все технические вопросы передачи данных и преобразования параметров.
Материал учебного пособия содержит многочисленные примеры интерфейсных программ, которые разработаны для преобразования разнотипных параметров с учетом особенностей их реализации системами программирования.
В отличие от рассмотренной общей схемы взаимодействия программ с двумя модулями (рис. 8.1), здесь рассмотрены высокотехничные средства обеспечения процесса преобразования: панели, сценарии, иконки и образцы интерфейсных программ для каждого конкретного случая взаимодействия программ. Далее дается краткое описание шести схем средств описания разноязыковых программ, взаимодействующих с языками, приведенными во второй колонке данной таблицы.
Интерфейс между Visual Basic и другими ЯП осуществляется с помощью оператора обращения, параметрами которого могут быть строки, значения, массивы и другие типы данных. Их обработка проводится функциями Windows API, API DLL и операциями преобразования типов данных. В качестве примера приведена схема обработки Интернет-приложений, задаваемых HTML-страницами Basic Visual, размещаемых в Web-браузере и базах данных.
Matlab содержит средства для решения задач линейной и нелинейной алгебры, действий над матрицами и др. и обеспечивает математические вычисления с помощью MatlabCompiler, Matlab C++, MatlabLibriary, Matlab Graphic Library. Приведена схема независимого приложения в среде Matlab, которая включает интерфейс между
| Средства описания программ | Языки взаимодействия | Виды интерфейсов |
|---|---|---|
| Visual Basic | ||
| Smalltalk | ||
| Lab View | ||
| JAVA | ||
| Perl |
Сформированный файл вызывается из программы в С++ и преобразовывается к виду архитектуры компьютера, куда отсылается результат.
Базовые средства Smalltalk обеспечивают создание приложений в среде VisualWorks и включают модель приложений, методы объектов, сообщения для передачи значений внешним объектам и пользовательский интерфейс (рис. 8.5). Модель приложения содержит функции DLL из класса внешнего интерфейса, взаимодействующие с функциями библиотеки С++.
(рис 8.5) Схема взаимодействия модели приложения с библиотекойСистема LabView предназначена для автоматизации производственных процессов, сбора данных, проведения измерений и управление созданием программ, взаимодействующих с аппаратурой. В ее состав входят прикладные средства, тестирования программ и драйверы взаимодействия с аппаратурой, запускаемых с пульта.
Система взаимодействует с
Среда Java содержит инструменты взаимодействия со всеми языками, приведенными во второй колонке таблицы. Общая схема связи языков JAVA, C и C++ программ приведена на рис. 8.6. Язык Perl появился в 80-х годах прошлого столетия как язык задания сценариев для взаимодействия с Интернет, управления задачами и создания CGI-сценариев на сервере в системе Unix. Данный язык имеет интрфейс с С, С++, Visual Basic и Java. Интерпретатор с языка Perl написан в языке С и каждый интерфейс с другим языком рассматривается как расширение, представляемое процедурами динамической библиотеки.
(рис 8.6) Схема взаимодействия приложенияи программ Java, C, C++Оператор вызова программы в С или С++ обеспечивает преобразование ее в специальный код, который размещается в библиотеке интерпретатора Perl. Сам интерпретатор может быть включен в Win32 или в программу на C/C++.
Таким образом, в работе [8.14] тщательно исследованы самые современные средства и инструменты представления разноязыковых программ и принципы их взаимодействия с широко используемыми ЯП. Даны рекомендации по конкретному применению каждого средства с учетом условий среды и правил прямой и обратной передачи параметров программе в ЯП из класса рассмотренных ЯП. Приведены многочисленные примеры, которые проверены экспериментально, ими можно пользоваться на практике либо использовать в качестве образца.
Цель данного стандарта [8.15] состоит в том, чтобы обеспечить не только описание типов данных в стандартном языке LI (
Независимые отЯП типы данных стандарта разделены на примитивные, агрегатные и сгенерированные (рис. 8.7).
(рис 8.7) Независимые от ЯП типы данных стандарта ISO/IEC 11404-1996В этот язык также включено семейство и генератор типов данных. Типы данных в стандарте описываются в LI-языке, который является более общим языком, в отличие от конкретных средств описания типов данных ЯП. Он содержит все существующие типы ЯП и общие типы данных, ориентированные на генерацию других типов данных.
Стандарт имеет раздел объявления типов данных, переименования существующих; объявление новых генераторов, значений и результатов. Каждый тип данных имеет шаблон, включающий описание и спецификатор типа данных, значение в пространстве значений, синтаксическое описание и операции над типами данных.
Стандарт состоит из разделов (рис. 8.8): объявление типов данных, объявленные типы данных; объявление новых генераторов (стеков, деревьев). Для объявляемого типа данных задается шаблон, включающий синтаксическое описание, спецификатор типа данных, значение в пространстве значений и операции над типами данных.
Средствами LI описываются параметры вызова, как элементы интерфейса, необходимые при обращении к стандартным сервисам и готовым программным компонентам.
LI-язык стандарта рекомендует следующие виды преобразования данных:
(рис 8.8) Объявление типов данных в стандарте ISO/IEC 11404-1996Внешнее преобразование типов данных и генераторов типов данных заключается в следующем:
Внешнее преобразование документирует аномалии при идентификации внутренних типов и дает гарантию того, что интерфейс между программными компонентами адекватно задается сервисным средством и игнорирует среду ЯП.
Внутреннее преобразование связывает примитивный тип данных или сгенерированный в LI-тип данных с конкретным внутренним типом данных ЯП. Представители отдельного семейства LI-типа данных могут преобразовываться в различные внутренние типы данных ЯП. Данное преобразование обладает следующими свойствами:
Обратное внутреннее преобразование для LI-типа данных состоит в преобразовании значений внутреннего типа данных в соответствующее значение LI-типа при наличии соответствия и отсутствия двусмысленности. Это преобразование для ЯП является коллекцией обратных внутренних преобразований LI-типа данных.
В стандарте имеется набор приложений.
В приложении 1 приведен перечень действующих стандартов (около 40), определяющих наборы символов. Для обеспечения совместимости используемых и реализуемых типов данных в приложении 2 содержатся рекомендации по идентификации типов данных и описанию аннотаций для атрибутов, параметров и др.
В приложении 3 приведены рекомендации по соответствующим внутренним типам данных, которые должны преобразовываться LI-типы данных. В приложении 1 показано, что синтаксис LI-языка является подмножеством стандарта
Предложенные в стандарте рекомендации, а также средства описания типов данных и методов их преобразования - универсальны. Программной поддержки стандарта пока отсутствует.
Программы, расположенные на разных типах компьютеров, передают друг другу данные через протоколы, их форматы преобразуется к формату данных принимающей серверной платформы (так называемый маршалинг данных) с учетом порядка и стратегии выравнивания, принятой на этой платформе. Демаршалинг данных - это обратное преобразование данных (т. е. полученного результата) к виду передавшей клиентской программы. Если среди передаваемых параметров оператора вызова содержатся нерелевантные типы или структуры данных, которые не соответствуют параметрам вызванного объекта, то производится прямое и обратное их преобразование средствами ЯП или стандарта [8.2, 8.11].
К средствам преобразования данных и их форматов относятся:
На каждой платформе компьютера используются соглашения о кодировке символов (например, ASCII), о форматах целых чисел и чисел с плавающей точкой (например, IEEE, VAX и др. ). Для представления целых типов, как правило, используется дополнительный код, а для типов float и double-стандарт ANSI/IEEE и др. Порядок расположения байтов зависит от структуры платформы (Big
XDR-стандарт содержит язык описания структур данных произвольной сложности и средства преобразования данных, передаваемых на платформы (Sun, VAX, IBM и др. ). Программы, написанные в ЯП, могут использовать данные в
В
Выравнивание данных - это размещение значений базовых типов с адреса, кратного действительному размеру в байтах (2, 4, 8, 16). Границы данных выравниваются по наибольшей длине (например, 16). Системные процедуры оптимизируют расположение
CDR-cтандарт среды CORBA обеспечивает преобразование данных в форматы передающей и принимающей платформ. Маршаллинг данных выполняет интерпретатор TypeCode и брокер
signed и unsigned ) в IDL, а также плавающий тип двойной точности и др.Преобразование данных выполняются процедурами encoder() и decoder() интерпретатора TypeCode, который используют базовые примитивы при выравнивании информации и помещения ее в буфер. Для сложного типа вычисляется размер и границы выравнивания, а также их размещение в таблице с индексами значений TCKind, используемых при инициализации брокера
ХМ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 и др. ).
Преобразование данных БД связано с различием логических структур данных, а также со следующими проблемами:
Проблема 1 решается путем перехода к реляционной модели данных и СУБД, которая является мощным математическим аппаратом, основанным на теории множеств и математической логике. Эта модель состоит из структурной, манипуляционной и целостной частей. В этих частях соответственно фиксируется структура данных, описание программ в SQL-языке и требования к целостности. Иерархические или
Проблема 2 вызвана тем, что логическая структура данных или концептуальная схема БД предполагают проектирование новой структуры БД при изменении предметной области или при переходе на новый тип СУБД. При этом сопоставляются данные старой и новой БД и изменяется справочная информация и классификаторы.
Проблема 3 определяется разноязычными текстовыми представлениями информации в БД. В старых БД использовался, как правило, один язык, а в новых может быть их несколько, поэтому для хранения данных с простым доступом к текстовым данным устанавливается соответствие текстовых данных, записанных в разных языках.
Проблему 4 можно сформулировать как метод хранения и обработки разных данных, вызванных спецификой СУБД иерархического, сетевого и реляционного типов. Наличие явной несовместимости типов и структур этих моделей данных, различные языки манипулирования данными приводят к тому, что нельзя сгенерировать на языке старой СУБД скрипты для переноса данных и последующего запуска БД в среде другой СУБД. Каждая СУБД обеспечивает внесение изменений в БД, которые в некоторой степени меняют и
Преобразование данных в БД.Учитывая приведенные проблемы, рассмотрим пути их решения. При длительной промышленной эксплуатация систем, работающих с БД, могут изменяться прикладные программы и данные, если в систему введена новая БД, а часть ранее определенных данных перенесена в новую БД. Это влечет за собой доработку прикладных программ доступа, чтобы приспособить их к измененной структуре новой БД или к старой БД. Для переноса данных из старой БД в новую создаются скрипты или DBF-файлы, которые размещаются в транзитной БД для переноса в новую БД. Если окажется, что процесс приведения структуры транзитной БД к новой окажется нецелесообразным, то разработка новой БД проводится "нуля". При этом справочники и классификаторы дополняются появившимися новыми данными.
Проблемы преобразования данных при использовании разных СУБД возникают также из-за того, что данные имеют различные способы хранения данных, среди которых могут оказаться несовместимые типы данных или доступ к данным осуществляется разными языками манипулирования.
Преобразование данных может проводиться несколько раз путем создания специальных скриптов и файлов с учетом ранее введенных данных, без их дублирования и корректного приведения несовместимых типов данных. Могут возникнуть ошибки, связанные с изменением форматов данных, дополнением старых справочников новыми данными и т. п.
Этапы преобразования данных основаны на использовании:
Первый метод - наиболее безболезненный для пользователей и разработчиков. Второй метод представляет собой создание нового проекта системы с заданной моделью данных. При третьем методе - система создается заново, в новую БД могут заноситься унаследованные данные из старой БД. Поскольку структуры БД могут оказаться различными, то, как правило, создаются временные приложения, в которых осуществляются необходимые преобразования данных при переносе в новую БД.
При применении первого и второго методов структура старой БД сохраняется и никакого преобразования данных, соответствия справочников и классификаторов не требуется, так как они используют единый формат хранения данных. Файлы передачи данных между разными БД.Проблема преобразования и переноса данных между различными СУБД решается на основе использования:
Процесс преобразования и переноса данных из разных БД в новую БД приведен на рис. 8.9.
(рис 8.9) Процесс преобразования и формирования новой БД из старых БДВ случае использования драйвера две СУБД соединены напрямую и передают данные, используя определенный интерфейс и специальныепрограммы взаимодействия двух СУБД, при которых вторая СУБД понимает результаты выполнения запросов на языке манипулирования данными первой СУБД, и наоборот. Данные на выходе первой СУБД являются данными на входе второй СУБД в языке манипулирования данными второй СУБД, такие данные могут быть внесены в транзитную БД.
Данный метод сложный в реализации и требует поставки программ переноса данных из других СУБД, которые привязаны к старой и новой СУБД. Поэтому второй метод переноса данных между различными СУБД - более предпочтительный.
Во втором случае данные из старой БД переносятся в транзитные файлы, SGL-скрипты, DBF-файлы с заранее заданными форматами данных, которые пересылаются в новую транзитную БД через сеть с помощью специальных утилит или средств новой СУБД.
Если вторая СУБД реляционного типа, то данные в транзитных файлах преобразуются к табличному виду. Если первая СУБД не реляционная, то данные должны быть приведены к табличному виду и первой нормальной форме.
Дальнейшая нормализация данных и приведение их к структуре новой БД осуществляется в транзитной БД с использованием 3-я или 4-я нормальной формы для задания структур данных. Каждая более высокая форма нормализации содержит в качестве подмножества более низкую форму, например, первую нормальную форму в виде скалярных значений.
Иными словами, отношения находятся в первой нормальной форме, если они хранятся в табличном виде (все ячейки в строке таблицы расположены в строго определенной последовательности) и каждая ячейка таблицы содержит только атомарные значения (элемент не является множеством).
Отношение находится в третьей нормальной форме тогда и только тогда, когда каждый кортеж состоит из значения первичного ключа, идентифицирующего некоторую сущность, и набора пустых значений или значений независимых атрибутов этой сущности. Т. е. отношение находится в
Два или несколько атрибутов -
Структуры старых БД не всегда можно привести к
В качестве унифицированного формата транзитных файлов используется формат DBF-файлов, поскольку многие СУБД, такие как DB2, FохРго и некоторые другие хранят данные в таких файлах, тем самым не требуется начальный перенос данных из старой СУБД в транзитные файлы. Большинство СУБД, формат хранения данных которых отличается от формата DBF-файлов, снабжены утилитами или драйверами, которые позволяют перенести данные в такой формат.
Активное использование готовых ПС проводится при создании и сопровождении системы. При этом возникают разного рода ошибки, которые требуют внесения изменений в систему после того, как ошибка обнаружена или возникла необходимость в изменении или улучшении некоторых характеристик системы [8.15, 16-22] .
В отличие от технического обеспечения, которое с течением времени требует ремонта, программное обеспечение не "снашивается", и поэтому процесс сопровождения нацелен более всего на эволюцию системы, то есть не только на исправление ошибок, а и на замену ее отдельных функций и возможностей.
Типичные причины внесения изменений это:
Как утверждают эксперты, процесс внесения изменений в эксплуатируемую систему достаточно дорогой, оценки его стоимости достигают от 60 до 80 % от общей стоимости разработки системы.
К видам сопровождения относятся:
Одна из проблем, влияющая на процесс внесения изменений, - это степень подготовки персонала, способного вносить необходимые изменения при возникновении определенных нерегулярных условий.
В связи с тем, что почти каждые 8-10 лет происходит смена архитектур компьютеров, ЯП и операционных сред, возникают проблемы сопровождения готовых ПС и их компонентов в новой среде или архитектуре, решение которых приводит к изменению либо обновлению отдельных элементов системы, или системы полностью.
В общем, процесс изменения (эволюции) ПС проводятся путем:
Цель внесения изменений в один компонент или в их совокупности - придание старой ПС нового назначения в новых условий применения. Методы изменения ПС служат способом продления жизни наследуемых и стареющих программ. С теоретической точки зрения эти методы изучены недостаточно, а с практической точки зрения многие программисты решают задачи внесения изменений в ПС постоянно.
Например, широкий круг специалистов затронула проблема изменения формата даты в 2000 году. Для систематической переделки функционирующих программ к новым возможностям ОС, языков и платформ современных компьютеров и т. п. используются современный аутсорсинг (Индия, Россия, Украина и др. ).
Внесение изменений в ПО можно рассматривать как эволюционный путь его развития. Эволюция ПО осуществляетсявнешними методами обработки компонентов в распределенной среде и внутренними методами, как изменение компонентов (СОМ), интерфейсов (Int) и/или систем. К внутренним методам эволюции отнесены методы реинженерии, рефакторинга и реверсной инженерии (рис. 8.10).
Эти методы обеспечивают разноплановое изменение программ или систем.
К ним относятся корректировка спецификаций, документации и программного кода в соответствии с требованиями на изменения [8.15-8.20].
(рис 8.10) Схема методов эволюции компонентов ПССуть этих методов состоит в следующем:
Реинженерия (reengineering) - это эволюция программы (системы) путем ее изменения в целях повышения удобства ее эксплуатации, сопровождения или изменения ее функций. Она включает в себя процессы реорганизации и реструктуризации системы, перевода отдельных компонентов системы в другой, более современный ЯП, а также процессы модификации или модернизации структуры и системы данных. При этом архитектура системы может оставаться неизменной.
Метод реинженерии - целевое средство получения нового компонента путем выполнения последовательности операций внесения изменений, модернизации или модификации, а также перепрограммирования отдельных компонентов ПС. Реализуется совокупностью моделей, методов и процессов, изменяющих структуру и возможности компонентов с целью получения компонента с новыми возможностями. Новые компоненты идентифицируются именами, которые используются при создании компонентных конфигураций и каркасов системы.
С технической точки зрения реинженерия - это решение проблемы эволюции системы путем изменения ее архитектуры в измененной среде, в которой компоненты размещаются на разных компьютерах. Причиной эволюции может быть изменение ЯП системы, например, Fortran, Сobol и др. с переходом на современные объектно-ориентированные языки, такие, как Java или C++.
Однако с коммерческой точки зрения реинженерию принимают часто за единственный способ сохранения наследуемых систем в эксплуатации. Полная эволюция системы - дорогостоящая либо рискованная процедура продления времени существования системы.
По сравнению с более радикальными подходами к совершенствованию систем реинженерия имеет следующие преимущества.
Реинженерия применяется для изменения деловых процессов, снижения количества излишних видов деятельности в них и повышения эффективности отдельных деловых процессов за счет внедрения новых программ или модификации существующих программ. Если бизнеспроцесс зависит от наследуемой системы, то изменения в нее должны планироваться.
Основное различие между реинженерией и новой разработкой системы состоит в том, что написание системной спецификации начинается не с "нуля", а с рассмотрения возможностей старой наследуемой системы.
К основным этапам процесса реинженерии относятся:
Причинами, требующими преобразование исходного кода программ в другой язык, могут быть:
К операциям реинженерии относятся:
Рефакторинг получил развитие в объектно-ориентированном программировании в связи с широким применением интерфейсов, шаблонов проектирования и методов улучшения кода [8.5]. Разработаны библиотеки типовых трансформаций искомых объектов (классов), которые улучшают те или иные характеристики ПС.
Метод рефакторинга компонента - это целевой способ получения нового компонента на базе существующего, который включает операции модификации (изменение, замещение, расширение) компонентов и интерфейсов. Цель метода - преобразование состава компонентов ПС или изменение отдельного компонента системы для придания ему новых функциональных и структурных характеристик, удовлетворяющих требованиям конфигурации. Метод включает совокупность моделей, методов и процессов, применяемых к определенным классам объектов и компонентам для получения новых или измененных объектовкомпонентов с целью повышения качественных характеристик ПС или добавление новых возможностей.
Процесс рефакторинга может быть ориентирован на получение новых компонентов, которые включают следующие операции по организации проведения изменений:
Каждая операция рефакторинга - базовая, атомарная функция преобразования, сохраняющая целостность компонента, т. е. правила, ограничения и зависимости между составными элементами компонента, позволяющие рассматривать компонент как единую и цельную структуру со своими свойствами и характеристиками.
После выполнения операций рефакторинга компоненты должны быть идентичны функциям исходного компонента. В случае коренного изменения группы компонентов системы путем внесения новых функций система приобретает новую функциональность.
Операции над компонентами удовлетворяют условиям:
Методы реверсной инженерии, которые разработаны в среде объектно-ориентированного программирования, базируются на выполнении базовых операций визуализации (visual) и измерения метрик (metric) ПС в рамках модели, которая предлагает следующие цели:
Этот подход ориентирован на индустриальные системы в миллион строк кода с использованием метрических оценок характеристик системы. Он разрешает генерацию тестов для проверки кодов, а также проведение метрического анализа системы для получения фактических значений внутренних и внешних характеристик системы [8.20].
В результате анализа системы строится модель, которая содержит список классов и паттернов системы, которые могут модифицироваться и перепроектироваться и тем самым составлять процесс эволюции системы. Если некоторый класс плохо спроектирован (например, много методов, пустые коды) или система не выполняет требуемую работу, то проводится сбор информации для изменения модели системы. В данном подходе действия по визуализации системы отражаются на экране в виде иерархического дерева, узлы которого отображают объекты и их свойства, а отношения задаются контурами команд фрагментов программ. При этом применяется таблица метрик, в которой находятся сведения о метриках классов объектов (число классов, атрибутов, подклассов и строк кода), метрик методов объектов (количество параметров, вызовов, сообщений и т. п. ), метрик атрибутов объектов (время доступа, количество доступов в классе и т. п. ).
В процессе визуализации ведется сбор метрических данных о системе. Если реально определены все данные в разных фактических метриках ПС, выполняются оценка качества и разрабатывается план перестройки устаревшей системы на новую систему с получением тех же возможностей или еще и дополнительных.
Таким образком, рассмотрены базовые понятия интерфейса, подходы к обеспечению интерфейса языков программирования и взаимодействия разноязыковых программ и данных. Определены общие проблемы неоднородности ЯП, платформ компьютеров и сред, влияющие на выполнение связей между разноязыковыми программами, сформулированы пути их решения. Изложены стандартные решения ISO/IEC 11404-1996 по обеспечению независимых от ЯП типов данных, стандарты преобразования форматов данных и эволюция программных систем.
В данной лекции рассматриваются базовые понятия программной инженерии - интерфейсы, средства их представления, взаимодействие разноязыковых программ и преобразование типов данных. Представлены подходы к обеспечению интерфейсов программ, записанных в разных языках программирования (ЯП), методы преобразования неэквивалентных типов данных при взаимодействии модулей и программ.
Определены общие задачи неоднородности ЯП, платформ и сред, влияющих на установление связей между разноязыковыми программами, сформулированы пути их решения. Рассмотрены рекомендации стандарта ISO/IEC 11404-1996 по обеспечению независимых от современных ЯП типов данных.
Рассмотрены подходы к
Общее определение. Интерфейс - это связь двух отдельных сущностей. Виды интерфейсов: языковые, программные, аппаратные, пользовательские, цифровые и т. п. Программный (API) и/или аппаратный интерфейс (port) - это способы преобразования входных/выходных данных во время объединения компьютера с периферийным оборудованием. В ЯП - это программа или часть программы, в которой определяются константы, переменные, параметры и структуры данных для передачи другим.
В программировании термин интерфейс олицетворяет собой набор операций, обеспечивающих определение видов услуг и способов их получения от программного объекта, предоставляющего эти услуги. На начальном этапе программирования в роли интерфейса выступают операторы обращения к ее процедурам и функциям программ через формальные параметры. Программы, процедуры и функции записывались в одном ЯП. Операторы обращения включали имена вызываемых объектов (процедур и функций) и список фактических параметров, задающих значения формальным параметрам и получаемым результатам. Последовательность и число формальных параметров соответствовало фактическим параметрам. Выполнение функции в среде программы на одном ЯП не вызывало проблем, так как типы данных параметров совпадали.
В случае, когда один из элементов (программа, процедура или функция) записаны на разных ЯП и, кроме того,
если они располагаются на разных компьютерах, то возникают проблемы неоднородности типов данных в этих ЯП,
структур памяти платформ компьютеров и операционных сред, где они выполняются.
Понятие интерфейса, как самостоятельного объекта, сформировалось в связи со сборкой или объединением разноязыковых программ и модулей в монолитную систему на больших ЭВМ (
(рис 8.1) Схема вызова модулей А и В из С через интерфейсы А'и B'Интерфейс играл роль посредника между вызываемым и вызывающим модулями. В нем давалось описание формальных и фактических параметров, производилась проверка соответствия передаваемых параметров (количества и порядка расположения), а также их типов данных. Если типы данных параметров оказывались не релевантными (например, передается целое, а результат функции - вещественное или наоборот), то производилось прямое и обратное их преобразование с учетом структуры памяти компьютеров. На рис. 8.1 приведена схема программы $$C$$, в которой содержатся два вызова - $$Call\;A()$$ и $$Call\;B()$$ с параметрами, которые через интерфейсные модули-посредники $$A^\prime$$ и $$B^\prime$$ производят преобразование данных и их передачу модулям $$А$$ и $$В$$. После выполнения $$А$$ и $$В$$ результаты преобразуются обратно к виду программы $$С$$.
Интерфейс в ООП.В ООП главным элементом является класс, включающий множество объектов с одинаковыми свойствами, операциями и отношениями. Класс имеет внутреннее (реализацию) и внешнее представление - интерфейс (табл. 8.1).
| Класс | |
|---|---|
| Внешнее представление | Внутреннее представление |
| Интерфейсные операции: |
Реализация операций класса, определение поведения. |
Интерфейс содержит множество операций, описывающих его поведение. Класс может поддерживать несколько интерфейсов, каждый из которых содержит операции и сигналы, используются для задания услуг класса или программного компонента. Интерфейс именует множество операций или определяет их сигнатуру и результирующие действия. Если интерфейс реализуется с помощью класса, то он наследует все его операции. Одни и те же операции могут появляться в различных интерфейсах. Если их сигнатуры совпадают, то они задают одну и ту же операцию, соответствующую поведению системы. Класс может реализовывать другой класс через интерфейс.
Операции и сигналы могут быть связаны отношениями обобщения. Интерфейс-потомок включает в себя все операции и сигналы своих предков и может добавлять собственные путем наследования всех операций прямого предка, т.е. его реализацию можно рассматривать как наследование поведения.
Новое толкование интерфейса объектов дано в работе П.Вегнера [8.3], который сформулировал парадигму перехода от алгоритмоввычислений к взаимодействию объектов. Суть этой парадигмы заключалась в том, что вычисление и взаимодействие объектов рассматривались как две ортогональные концепции. Взаимодействие - это некоторое действие ( $$action$$ ), но не вычисление, а сообщение - не алгоритм, а действие, ответ на которое зависит от последовательности операций ( $$Op$$ ), влияющих на состоянии разделенной ( $$shared\; state$$, $$ss$$ ) памяти локальной программы (рис. 8.3). Операции интерфейса ( $$Op1$$ и $$Op2$$ ) относятся к классу неалгоритмических и обеспечивают взаимодействие объектов через сообщения.
(рис 8.3) Интерфейс взаимодействия через операции интерфейса (по Вегнеру)Вегнер рассматривает модель взаимодействия, как обобщение машины Тьюринга - распределенной интерактивной модели взаимодействия объектов с входными (input) и выходными (output) действиями и возможностью продвижения в ней потенциально бесконечного входного потока (запросов, пакетов) в заданном интервале времени.
Дальнейшим развитием идеи взаимодействия, основанного на действиях, является язык AL (Action language), обеспечиывющий вызовов процедур (локальных или распределенных) с разверткой каждого вызова в программу [8.4], состоящую из операторов действий. Программа из вызовов процедур рассматривается в AL как ограниченное множество конечных программ, взаимодействующих со средой, в которую они погружаются.
Интерфейс в современных средах и сетях.Появление разных компьютеров и их объединение в локальные и глобальные сети привело к уточнению понятия интерфейса как удаленного вызова (сообщения) программ, расположенных в разных узлах сети или среды и получающих входные данные из сообщений.
Сети строятся на основе стандартной семиуровневой модели открытых систем OSI (Open Systems Interconnection) [8.5]. Объекты уровней в этой модели связываются между собой по горизонтали и вертикали. Запросы от приложений поступают на
Доступ к услугам осуществляется с помощью разных механизмов:
RPC- вызов задает интерфейс удаленным программам в языках высокого или низкого уровней. Язык высокого уровня служит для задания в RPC-вызове параметров удаленной процедуры, которые передаются ей через сетевое сообщение.
Взаимосвязь процесса с удаленно расположенным от него другим процессом (например, сервером) на другом компьютере выполняет протокол UDP или TCP/IP, который передает параметры в
Механизм посылки запроса в системе CORBA базируется на описании запроса в языке IDL для доступа к удаленному методу/функции через протокол
Вызов метода RMI в системе JAVA выполняет виртуальная машина (virtual machine), которая интерпретирует byte-коды вызванной программы, созданные разными системами программирования ЯП (JAVA, Pascal, С++) на разных компьютерах и средах. Функции RMI аналогичны брокеру
В распределенной среде реализуется два способа связывания: на уровне ЯП через интерфейсы прикладного программирования и компиляторов IDL, генерирующих клиентские и серверные Stab. Интерфейсы определяются в языках IDL или
Интерфейс в IDL или в API включает описание формальных и фактических параметров программ, их типов и порядка задания операций передачи параметров и результатов при их взаимодействии. Это описание есть не что иное, как спецификация интерфейсного посредника двух разноязыковых программ (аналогично, как на рис. 8.1), которые взаимодействуют друг с другом через механизм вызова интерфейсных функций или посредников двух типов программ (клиент и сервер), выполняемых на разных процессах.
В функции интерфейсного посредника клиента входят:
Общие функции интерфейсного посредника сервера состоят в следующем:
Описание интерфейсного посредника не зависит от ЯП взаимодействующих объектов и в целом одинаково для всех вызывающих и вызываемых объектов. Посредник описывается в языке спецификации интерфейса IDL.
Интерфейсные посредники задают связь между клиентом и сервером (
Под интероперабельностью понимается способность совместного, согласованного взаимодействия разнородных компонентов системы для решения определенной задачи.
К средствам обеспечения интероперабельности и передачи данных между разными средами и платформами относится, например, стандартный механизм связи между JAVA и C/C++ компонентами, основанный на применении концепции Java Native Interface (
Эти средства включает в себя анализ JAVA-классов в целях поиска прототипов обращений к функциям, реализованных на языках C/C++, и генерацию заголовочных файлов для использования их при компиляции C/C++ программ. В средстве JAVA классу известно, что в нем содержится обращение не к JAVA-методу (он называется $$native$$ и для загрузки необходимых C/C++ библиотек добавляется вызов функции), ориентируется именно на такую связь. Данная схема действует в одном направлении - от JAVA к C/C++ и только для такой комбинации ЯП.
Еще вариант реализации аналогичной задачи предлагает технология Bridge2Java,которая обеспечивает обращение из JAVA- классов к COM-компонентам. В этих целях генерируется оболочка для COM-компонента, который включает прокси-класс, обеспечивает необходимое преобразование данных средствами стандартной библиотеки преобразований типов. Данная схема не требует изменений в исходном Java-классе и COM-компоненты могут быть написаны в разных языках.
Механизм интероперабельности реализован также на платформе . Net с помощью языка CLR (Common Language Runtime). В этот язык транслируются коды, написанные в разных ЯП (C#, Visual Basic, C++, Jscript). CLR разрешает не только интегрировать компоненты, разработанные в разных ЯП, а и использовать библиотеку стандартных классов независимо от языка реализации.
Такой подход позволяет реализовать доступ к компонентам, которые были разработаны раньше без ориентации на платформу . Net, например к COM-компонентам. Для этого используются стандартные средства генерации оболочки для COM-компонента, с помощью которой он представляется как . Net-компонент. При такой схеме реализуются все виды связей и для любых ЯП данной среды.
Основные ЯП, используемые для описания компонентов в современных средах, это С++, Паскаль, JAVA и др. [8.2, 8.12, 8.13].
Разноязыковые программы, записанные в этих языках, обращаются друг к другу через удаленный вызов, который предполагает взаимно однозначное соответствие между фактическими параметрами $$V = \{v^{1}, v^{2}, \dots, v^{к}\}$$ вызывающей программы и формальными параметрами $$F = \{f^{1}, f^{2}, \dots, f^{к1}\}$$ вызываемой программы. При неоднородности одного из параметров из множества формальных или фактических параметров разноязыковых программ необходимо провести отображение (mapping) неэквивалентного типа данных параметра в одном ЯП в соответствующий тип данных в другом ЯП.
Аналогично решается задача преобразования неэквивалентных типов данных в ЯП. Представим это преобразование такими этапами.
Этап 1. Построение операций преобразования типов данных $$T_{\alpha} = \{T_{\alpha}^{t}\}$$ для множества языков программирования $$L = \{ l_{\alpha} \}_{\alpha=1, n}$$.
Этап 2.Построение отображения простых типов данных для каждой пары взаимодействующих компонентов в $$l_{\alpha1}$$ и $$l_{\alpha2}$$, а также применение операций селектора $$S$$ и конструктора $$С$$ для отображения сложных структур данных в этих языках. Один из способов формализованного преобразования типов данных - создание алгебраических систем для каждого типа данных $$T_{\alpha}^{t}$$:
$$G_{\alpha}^{t} = < X_{\alpha}^{t},\Omega_{\alpha}^{t} >,$$где $$t$$ - тип данных, $$X_{\alpha}^{t}$$ - множество значений, которые могут принимать переменные этого типа данных, $$\Omega_{\alpha}^{t}$$ - множество операций над этими типами данных.
В качестве простых типов данных современных ЯП могут быть $$t = b (bool), c (char), i (int), r (real)$$.
Каждый элемент класса простых и
$$G_{\alpha}^{t} = < X_{\alpha}^{t},\Omega_{\alpha}^{t} > $$, где $$t = b, c, i, r, a, z, u, e$$.
Операциям преобразования каждого $$t$$ типа данных соответствует изоморфное отображение двух алгебраических систем с совместимыми типами данных двух разных языков. В классе систем (8.1) преобразование типов данных $$t \to q$$ для пары языков $$l_{t}$$ и $$l_{q}$$ обладает такими свойствами отображений:
Отображения 1, 2 сохраняют линейный порядок элементов, поскольку
Системы программирования с ЯП имеют следующие особенности компилирования программ:
Связь между различными языками $$L_{1}, \dots, L_{n}$$ осуществляется через интерфейс пары языков $$L_{i}$$, $$L_{n}$$, взаимодействующих между собой в среде, генерирующей соответствующие конструкции $$L_{i}$$ в операции описания интерфейса и наоборот.
Взаимодействие ЯП в среде CORBA.Принцип взаимодействия объектов в среде CORBA состоит в том, что любой объект выполняет метод (функцию, сервис, операцию) при условии, если другой объект, выступающий в роли клиента для него, посылает ему запрос для выполнения этого метода. Объект выполняет метод через интерфейс.
Взаимодействие ЯП в системе CORBA состоит в отображении типов объектов в типы клиентских и серверных стабов путем
Так как ЯП системы CORBA могут быть реализованы на разных платформах и в разных средах, то их двоичное представление зависит от конкретной аппаратной платформы [8.2, 8.7, 8.8]. Для всех ЯПсистемы CORBA (С++, JAVA, Smalltalk, Visual C++, COBOL, Ada-95) предусмотрен общий механизм связи и расположения параметров методов объектов в промежуточном слое. Связь между объектными моделями каждого ЯП системы СОМ и JAVA выполняет брокер
(рис 8.4) Интегрированная среда системы CORBAЕсли в общую объектную модель CORBA входит объектная модель СОМ, то в ней типы данных определяются статически, а конструирование
В случае вхождения в состав модели CORBA объектной модели JAVA/RMI, вызов удаленного метода объекта осуществляется ссылками на объекты, задаваемые указателями на адреса памяти.
Интерфейс как объектный тип реализуется классами и предоставляет удаленный доступ к нему сервера. Компилятор JAVA создает байткод, который интерпретируется виртуальной машиной, обеспечивающей переносимость байткодов и однородность представления данных на всех платформах среды СORBA.
Проблеме взаимодействия разноязыковых программ на множестве современных языков (C/C++, Visual C++, Visual Basic, Matlab,Smalltalk, Lava, LabView, Perl) посвящена работа [8.14]. В ней представлены различные варианты и конкретные примеры связей каждой пары ЯП из этого множества с помощью практически реализованных и приведенных функций преобразования, методов обращения к ним из программ на одном языке к программе на другом языке. В таблице 8.1. приведены варианты взаимосвязи разных ЯП.
В ней отражены особенности их взаимодействия через разные виды интерфейсов, приведены более 25 видов пар современных ЯП и соответственно прямого и обратного взаимодействия разноязыковых программ.
Для этих пар ЯП изложены принципы запуска разных программ и все технические вопросы передачи данных и преобразования параметров.
Материал учебного пособия содержит многочисленные примеры интерфейсных программ, которые разработаны для преобразования разнотипных параметров с учетом особенностей их реализации системами программирования.
В отличие от рассмотренной общей схемы взаимодействия программ с двумя модулями (рис. 8.1), здесь рассмотрены высокотехничные средства обеспечения процесса преобразования: панели, сценарии, иконки и образцы интерфейсных программ для каждого конкретного случая взаимодействия программ. Далее дается краткое описание шести схем средств описания разноязыковых программ, взаимодействующих с языками, приведенными во второй колонке данной таблицы.
Интерфейс между Visual Basic и другими ЯП осуществляется с помощью оператора обращения, параметрами которого могут быть строки, значения, массивы и другие типы данных. Их обработка проводится функциями Windows API, API DLL и операциями преобразования типов данных. В качестве примера приведена схема обработки Интернет-приложений, задаваемых HTML-страницами Basic Visual, размещаемых в Web-браузере и базах данных.
Matlab содержит средства для решения задач линейной и нелинейной алгебры, действий над матрицами и др. и обеспечивает математические вычисления с помощью MatlabCompiler, Matlab C++, MatlabLibriary, Matlab Graphic Library. Приведена схема независимого приложения в среде Matlab, которая включает интерфейс между
| Средства описания программ | Языки взаимодействия | Виды интерфейсов |
|---|---|---|
| Visual Basic | ||
| Smalltalk | ||
| Lab View | ||
| JAVA | ||
| Perl |
Сформированный файл вызывается из программы в С++ и преобразовывается к виду архитектуры компьютера, куда отсылается результат.
Базовые средства Smalltalk обеспечивают создание приложений в среде VisualWorks и включают модель приложений, методы объектов, сообщения для передачи значений внешним объектам и пользовательский интерфейс (рис. 8.5). Модель приложения содержит функции DLL из класса внешнего интерфейса, взаимодействующие с функциями библиотеки С++.
(рис 8.5) Схема взаимодействия модели приложения с библиотекойСистема LabView предназначена для автоматизации производственных процессов, сбора данных, проведения измерений и управление созданием программ, взаимодействующих с аппаратурой. В ее состав входят прикладные средства, тестирования программ и драйверы взаимодействия с аппаратурой, запускаемых с пульта.
Система взаимодействует с
Среда Java содержит инструменты взаимодействия со всеми языками, приведенными во второй колонке таблицы. Общая схема связи языков JAVA, C и C++ программ приведена на рис. 8.6. Язык Perl появился в 80-х годах прошлого столетия как язык задания сценариев для взаимодействия с Интернет, управления задачами и создания CGI-сценариев на сервере в системе Unix. Данный язык имеет интрфейс с С, С++, Visual Basic и Java. Интерпретатор с языка Perl написан в языке С и каждый интерфейс с другим языком рассматривается как расширение, представляемое процедурами динамической библиотеки.
(рис 8.6) Схема взаимодействия приложенияи программ Java, C, C++Оператор вызова программы в С или С++ обеспечивает преобразование ее в специальный код, который размещается в библиотеке интерпретатора Perl. Сам интерпретатор может быть включен в Win32 или в программу на C/C++.
Таким образом, в работе [8.14] тщательно исследованы самые современные средства и инструменты представления разноязыковых программ и принципы их взаимодействия с широко используемыми ЯП. Даны рекомендации по конкретному применению каждого средства с учетом условий среды и правил прямой и обратной передачи параметров программе в ЯП из класса рассмотренных ЯП. Приведены многочисленные примеры, которые проверены экспериментально, ими можно пользоваться на практике либо использовать в качестве образца.
Цель данного стандарта [8.15] состоит в том, чтобы обеспечить не только описание типов данных в стандартном языке LI (
Независимые отЯП типы данных стандарта разделены на примитивные, агрегатные и сгенерированные (рис. 8.7).
(рис 8.7) Независимые от ЯП типы данных стандарта ISO/IEC 11404-1996В этот язык также включено семейство и генератор типов данных. Типы данных в стандарте описываются в LI-языке, который является более общим языком, в отличие от конкретных средств описания типов данных ЯП. Он содержит все существующие типы ЯП и общие типы данных, ориентированные на генерацию других типов данных.
Стандарт имеет раздел объявления типов данных, переименования существующих; объявление новых генераторов, значений и результатов. Каждый тип данных имеет шаблон, включающий описание и спецификатор типа данных, значение в пространстве значений, синтаксическое описание и операции над типами данных.
Стандарт состоит из разделов (рис. 8.8): объявление типов данных, объявленные типы данных; объявление новых генераторов (стеков, деревьев). Для объявляемого типа данных задается шаблон, включающий синтаксическое описание, спецификатор типа данных, значение в пространстве значений и операции над типами данных.
Средствами LI описываются параметры вызова, как элементы интерфейса, необходимые при обращении к стандартным сервисам и готовым программным компонентам.
LI-язык стандарта рекомендует следующие виды преобразования данных:
(рис 8.8) Объявление типов данных в стандарте ISO/IEC 11404-1996Внешнее преобразование типов данных и генераторов типов данных заключается в следующем:
Внешнее преобразование документирует аномалии при идентификации внутренних типов и дает гарантию того, что интерфейс между программными компонентами адекватно задается сервисным средством и игнорирует среду ЯП.
Внутреннее преобразование связывает примитивный тип данных или сгенерированный в LI-тип данных с конкретным внутренним типом данных ЯП. Представители отдельного семейства LI-типа данных могут преобразовываться в различные внутренние типы данных ЯП. Данное преобразование обладает следующими свойствами:
Обратное внутреннее преобразование для LI-типа данных состоит в преобразовании значений внутреннего типа данных в соответствующее значение LI-типа при наличии соответствия и отсутствия двусмысленности. Это преобразование для ЯП является коллекцией обратных внутренних преобразований LI-типа данных.
В стандарте имеется набор приложений.
В приложении 1 приведен перечень действующих стандартов (около 40), определяющих наборы символов. Для обеспечения совместимости используемых и реализуемых типов данных в приложении 2 содержатся рекомендации по идентификации типов данных и описанию аннотаций для атрибутов, параметров и др.
В приложении 3 приведены рекомендации по соответствующим внутренним типам данных, которые должны преобразовываться LI-типы данных. В приложении 1 показано, что синтаксис LI-языка является подмножеством стандарта
Предложенные в стандарте рекомендации, а также средства описания типов данных и методов их преобразования - универсальны. Программной поддержки стандарта пока отсутствует.
Программы, расположенные на разных типах компьютеров, передают друг другу данные через протоколы, их форматы преобразуется к формату данных принимающей серверной платформы (так называемый маршалинг данных) с учетом порядка и стратегии выравнивания, принятой на этой платформе. Демаршалинг данных - это обратное преобразование данных (т. е. полученного результата) к виду передавшей клиентской программы. Если среди передаваемых параметров оператора вызова содержатся нерелевантные типы или структуры данных, которые не соответствуют параметрам вызванного объекта, то производится прямое и обратное их преобразование средствами ЯП или стандарта [8.2, 8.11].
К средствам преобразования данных и их форматов относятся:
На каждой платформе компьютера используются соглашения о кодировке символов (например, ASCII), о форматах целых чисел и чисел с плавающей точкой (например, IEEE, VAX и др. ). Для представления целых типов, как правило, используется дополнительный код, а для типов float и double-стандарт ANSI/IEEE и др. Порядок расположения байтов зависит от структуры платформы (Big
XDR-стандарт содержит язык описания структур данных произвольной сложности и средства преобразования данных, передаваемых на платформы (Sun, VAX, IBM и др. ). Программы, написанные в ЯП, могут использовать данные в
В
Выравнивание данных - это размещение значений базовых типов с адреса, кратного действительному размеру в байтах (2, 4, 8, 16). Границы данных выравниваются по наибольшей длине (например, 16). Системные процедуры оптимизируют расположение
CDR-cтандарт среды CORBA обеспечивает преобразование данных в форматы передающей и принимающей платформ. Маршаллинг данных выполняет интерпретатор TypeCode и брокер
signed и unsigned ) в IDL, а также плавающий тип двойной точности и др.Преобразование данных выполняются процедурами encoder() и decoder() интерпретатора TypeCode, который используют базовые примитивы при выравнивании информации и помещения ее в буфер. Для сложного типа вычисляется размер и границы выравнивания, а также их размещение в таблице с индексами значений TCKind, используемых при инициализации брокера
ХМ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 и др. ).
Преобразование данных БД связано с различием логических структур данных, а также со следующими проблемами:
Проблема 1 решается путем перехода к реляционной модели данных и СУБД, которая является мощным математическим аппаратом, основанным на теории множеств и математической логике. Эта модель состоит из структурной, манипуляционной и целостной частей. В этих частях соответственно фиксируется структура данных, описание программ в SQL-языке и требования к целостности. Иерархические или
Проблема 2 вызвана тем, что логическая структура данных или концептуальная схема БД предполагают проектирование новой структуры БД при изменении предметной области или при переходе на новый тип СУБД. При этом сопоставляются данные старой и новой БД и изменяется справочная информация и классификаторы.
Проблема 3 определяется разноязычными текстовыми представлениями информации в БД. В старых БД использовался, как правило, один язык, а в новых может быть их несколько, поэтому для хранения данных с простым доступом к текстовым данным устанавливается соответствие текстовых данных, записанных в разных языках.
Проблему 4 можно сформулировать как метод хранения и обработки разных данных, вызванных спецификой СУБД иерархического, сетевого и реляционного типов. Наличие явной несовместимости типов и структур этих моделей данных, различные языки манипулирования данными приводят к тому, что нельзя сгенерировать на языке старой СУБД скрипты для переноса данных и последующего запуска БД в среде другой СУБД. Каждая СУБД обеспечивает внесение изменений в БД, которые в некоторой степени меняют и
Преобразование данных в БД.Учитывая приведенные проблемы, рассмотрим пути их решения. При длительной промышленной эксплуатация систем, работающих с БД, могут изменяться прикладные программы и данные, если в систему введена новая БД, а часть ранее определенных данных перенесена в новую БД. Это влечет за собой доработку прикладных программ доступа, чтобы приспособить их к измененной структуре новой БД или к старой БД. Для переноса данных из старой БД в новую создаются скрипты или DBF-файлы, которые размещаются в транзитной БД для переноса в новую БД. Если окажется, что процесс приведения структуры транзитной БД к новой окажется нецелесообразным, то разработка новой БД проводится "нуля". При этом справочники и классификаторы дополняются появившимися новыми данными.
Проблемы преобразования данных при использовании разных СУБД возникают также из-за того, что данные имеют различные способы хранения данных, среди которых могут оказаться несовместимые типы данных или доступ к данным осуществляется разными языками манипулирования.
Преобразование данных может проводиться несколько раз путем создания специальных скриптов и файлов с учетом ранее введенных данных, без их дублирования и корректного приведения несовместимых типов данных. Могут возникнуть ошибки, связанные с изменением форматов данных, дополнением старых справочников новыми данными и т. п.
Этапы преобразования данных основаны на использовании:
Первый метод - наиболее безболезненный для пользователей и разработчиков. Второй метод представляет собой создание нового проекта системы с заданной моделью данных. При третьем методе - система создается заново, в новую БД могут заноситься унаследованные данные из старой БД. Поскольку структуры БД могут оказаться различными, то, как правило, создаются временные приложения, в которых осуществляются необходимые преобразования данных при переносе в новую БД.
При применении первого и второго методов структура старой БД сохраняется и никакого преобразования данных, соответствия справочников и классификаторов не требуется, так как они используют единый формат хранения данных. Файлы передачи данных между разными БД.Проблема преобразования и переноса данных между различными СУБД решается на основе использования:
Процесс преобразования и переноса данных из разных БД в новую БД приведен на рис. 8.9.
(рис 8.9) Процесс преобразования и формирования новой БД из старых БДВ случае использования драйвера две СУБД соединены напрямую и передают данные, используя определенный интерфейс и специальныепрограммы взаимодействия двух СУБД, при которых вторая СУБД понимает результаты выполнения запросов на языке манипулирования данными первой СУБД, и наоборот. Данные на выходе первой СУБД являются данными на входе второй СУБД в языке манипулирования данными второй СУБД, такие данные могут быть внесены в транзитную БД.
Данный метод сложный в реализации и требует поставки программ переноса данных из других СУБД, которые привязаны к старой и новой СУБД. Поэтому второй метод переноса данных между различными СУБД - более предпочтительный.
Во втором случае данные из старой БД переносятся в транзитные файлы, SGL-скрипты, DBF-файлы с заранее заданными форматами данных, которые пересылаются в новую транзитную БД через сеть с помощью специальных утилит или средств новой СУБД.
Если вторая СУБД реляционного типа, то данные в транзитных файлах преобразуются к табличному виду. Если первая СУБД не реляционная, то данные должны быть приведены к табличному виду и первой нормальной форме.
Дальнейшая нормализация данных и приведение их к структуре новой БД осуществляется в транзитной БД с использованием 3-я или 4-я нормальной формы для задания структур данных. Каждая более высокая форма нормализации содержит в качестве подмножества более низкую форму, например, первую нормальную форму в виде скалярных значений.
Иными словами, отношения находятся в первой нормальной форме, если они хранятся в табличном виде (все ячейки в строке таблицы расположены в строго определенной последовательности) и каждая ячейка таблицы содержит только атомарные значения (элемент не является множеством).
Отношение находится в третьей нормальной форме тогда и только тогда, когда каждый кортеж состоит из значения первичного ключа, идентифицирующего некоторую сущность, и набора пустых значений или значений независимых атрибутов этой сущности. Т. е. отношение находится в
Два или несколько атрибутов -
Структуры старых БД не всегда можно привести к
В качестве унифицированного формата транзитных файлов используется формат DBF-файлов, поскольку многие СУБД, такие как DB2, FохРго и некоторые другие хранят данные в таких файлах, тем самым не требуется начальный перенос данных из старой СУБД в транзитные файлы. Большинство СУБД, формат хранения данных которых отличается от формата DBF-файлов, снабжены утилитами или драйверами, которые позволяют перенести данные в такой формат.
Активное использование готовых ПС проводится при создании и сопровождении системы. При этом возникают разного рода ошибки, которые требуют внесения изменений в систему после того, как ошибка обнаружена или возникла необходимость в изменении или улучшении некоторых характеристик системы [8.15, 16-22] .
В отличие от технического обеспечения, которое с течением времени требует ремонта, программное обеспечение не "снашивается", и поэтому процесс сопровождения нацелен более всего на эволюцию системы, то есть не только на исправление ошибок, а и на замену ее отдельных функций и возможностей.
Типичные причины внесения изменений это:
Как утверждают эксперты, процесс внесения изменений в эксплуатируемую систему достаточно дорогой, оценки его стоимости достигают от 60 до 80 % от общей стоимости разработки системы.
К видам сопровождения относятся:
Одна из проблем, влияющая на процесс внесения изменений, - это степень подготовки персонала, способного вносить необходимые изменения при возникновении определенных нерегулярных условий.
В связи с тем, что почти каждые 8-10 лет происходит смена архитектур компьютеров, ЯП и операционных сред, возникают проблемы сопровождения готовых ПС и их компонентов в новой среде или архитектуре, решение которых приводит к изменению либо обновлению отдельных элементов системы, или системы полностью.
В общем, процесс изменения (эволюции) ПС проводятся путем:
Цель внесения изменений в один компонент или в их совокупности - придание старой ПС нового назначения в новых условий применения. Методы изменения ПС служат способом продления жизни наследуемых и стареющих программ. С теоретической точки зрения эти методы изучены недостаточно, а с практической точки зрения многие программисты решают задачи внесения изменений в ПС постоянно.
Например, широкий круг специалистов затронула проблема изменения формата даты в 2000 году. Для систематической переделки функционирующих программ к новым возможностям ОС, языков и платформ современных компьютеров и т. п. используются современный аутсорсинг (Индия, Россия, Украина и др. ).
Внесение изменений в ПО можно рассматривать как эволюционный путь его развития. Эволюция ПО осуществляетсявнешними методами обработки компонентов в распределенной среде и внутренними методами, как изменение компонентов (СОМ), интерфейсов (Int) и/или систем. К внутренним методам эволюции отнесены методы реинженерии, рефакторинга и реверсной инженерии (рис. 8.10).
Эти методы обеспечивают разноплановое изменение программ или систем.
К ним относятся корректировка спецификаций, документации и программного кода в соответствии с требованиями на изменения [8.15-8.20].
(рис 8.10) Схема методов эволюции компонентов ПССуть этих методов состоит в следующем:
Реинженерия (reengineering) - это эволюция программы (системы) путем ее изменения в целях повышения удобства ее эксплуатации, сопровождения или изменения ее функций. Она включает в себя процессы реорганизации и реструктуризации системы, перевода отдельных компонентов системы в другой, более современный ЯП, а также процессы модификации или модернизации структуры и системы данных. При этом архитектура системы может оставаться неизменной.
Метод реинженерии - целевое средство получения нового компонента путем выполнения последовательности операций внесения изменений, модернизации или модификации, а также перепрограммирования отдельных компонентов ПС. Реализуется совокупностью моделей, методов и процессов, изменяющих структуру и возможности компонентов с целью получения компонента с новыми возможностями. Новые компоненты идентифицируются именами, которые используются при создании компонентных конфигураций и каркасов системы.
С технической точки зрения реинженерия - это решение проблемы эволюции системы путем изменения ее архитектуры в измененной среде, в которой компоненты размещаются на разных компьютерах. Причиной эволюции может быть изменение ЯП системы, например, Fortran, Сobol и др. с переходом на современные объектно-ориентированные языки, такие, как Java или C++.
Однако с коммерческой точки зрения реинженерию принимают часто за единственный способ сохранения наследуемых систем в эксплуатации. Полная эволюция системы - дорогостоящая либо рискованная процедура продления времени существования системы.
По сравнению с более радикальными подходами к совершенствованию систем реинженерия имеет следующие преимущества.
Реинженерия применяется для изменения деловых процессов, снижения количества излишних видов деятельности в них и повышения эффективности отдельных деловых процессов за счет внедрения новых программ или модификации существующих программ. Если бизнеспроцесс зависит от наследуемой системы, то изменения в нее должны планироваться.
Основное различие между реинженерией и новой разработкой системы состоит в том, что написание системной спецификации начинается не с "нуля", а с рассмотрения возможностей старой наследуемой системы.
К основным этапам процесса реинженерии относятся:
Причинами, требующими преобразование исходного кода программ в другой язык, могут быть:
К операциям реинженерии относятся:
Рефакторинг получил развитие в объектно-ориентированном программировании в связи с широким применением интерфейсов, шаблонов проектирования и методов улучшения кода [8.5]. Разработаны библиотеки типовых трансформаций искомых объектов (классов), которые улучшают те или иные характеристики ПС.
Метод рефакторинга компонента - это целевой способ получения нового компонента на базе существующего, который включает операции модификации (изменение, замещение, расширение) компонентов и интерфейсов. Цель метода - преобразование состава компонентов ПС или изменение отдельного компонента системы для придания ему новых функциональных и структурных характеристик, удовлетворяющих требованиям конфигурации. Метод включает совокупность моделей, методов и процессов, применяемых к определенным классам объектов и компонентам для получения новых или измененных объектовкомпонентов с целью повышения качественных характеристик ПС или добавление новых возможностей.
Процесс рефакторинга может быть ориентирован на получение новых компонентов, которые включают следующие операции по организации проведения изменений:
Каждая операция рефакторинга - базовая, атомарная функция преобразования, сохраняющая целостность компонента, т. е. правила, ограничения и зависимости между составными элементами компонента, позволяющие рассматривать компонент как единую и цельную структуру со своими свойствами и характеристиками.
После выполнения операций рефакторинга компоненты должны быть идентичны функциям исходного компонента. В случае коренного изменения группы компонентов системы путем внесения новых функций система приобретает новую функциональность.
Операции над компонентами удовлетворяют условиям:
Методы реверсной инженерии, которые разработаны в среде объектно-ориентированного программирования, базируются на выполнении базовых операций визуализации (visual) и измерения метрик (metric) ПС в рамках модели, которая предлагает следующие цели:
Этот подход ориентирован на индустриальные системы в миллион строк кода с использованием метрических оценок характеристик системы. Он разрешает генерацию тестов для проверки кодов, а также проведение метрического анализа системы для получения фактических значений внутренних и внешних характеристик системы [8.20].
В результате анализа системы строится модель, которая содержит список классов и паттернов системы, которые могут модифицироваться и перепроектироваться и тем самым составлять процесс эволюции системы. Если некоторый класс плохо спроектирован (например, много методов, пустые коды) или система не выполняет требуемую работу, то проводится сбор информации для изменения модели системы. В данном подходе действия по визуализации системы отражаются на экране в виде иерархического дерева, узлы которого отображают объекты и их свойства, а отношения задаются контурами команд фрагментов программ. При этом применяется таблица метрик, в которой находятся сведения о метриках классов объектов (число классов, атрибутов, подклассов и строк кода), метрик методов объектов (количество параметров, вызовов, сообщений и т. п. ), метрик атрибутов объектов (время доступа, количество доступов в классе и т. п. ).
В процессе визуализации ведется сбор метрических данных о системе. Если реально определены все данные в разных фактических метриках ПС, выполняются оценка качества и разрабатывается план перестройки устаревшей системы на новую систему с получением тех же возможностей или еще и дополнительных.
Таким образком, рассмотрены базовые понятия интерфейса, подходы к обеспечению интерфейса языков программирования и взаимодействия разноязыковых программ и данных. Определены общие проблемы неоднородности ЯП, платформ компьютеров и сред, влияющие на выполнение связей между разноязыковыми программами, сформулированы пути их решения. Изложены стандартные решения ISO/IEC 11404-1996 по обеспечению независимых от ЯП типов данных, стандарты преобразования форматов данных и эволюция программных систем.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.