Лекция 6 Интеграция существующих приложений в.NET –Преимущества платформы.NET для существующих приложений –Различные способы интеграции существующих приложений.

Презентация:



Advertisements
Похожие презентации
Microsoft.NET Первая лекция. COM Доступ к компонентам только через интерфейсы Назначение уникальных идентификаторов компонентам и интерфейсам Регистрация.
Advertisements

Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Данные в Visual Basic. Типы данных ДАННЫЕ переменные величины постоянные величины.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
ФИЛОСОФИЯ.NET Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться.
.NET framework Колотаев А.В.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
«Ветвление» в VB If условие Then Действия End If If условие Then Действия 1 Else Действия 2 End If.
Высокоуровневые методы информатики и программирования Лекция 9 Делегаты.
1 Умение мыслить объектно (проектирование архитектуры) Культура кодирования Знание языка и технологий Знание языка и технологий Понимание процесса Задача.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Описание переменных в языке Visual Basic Презентацию подготовила учитель информатики МБОУ СОШ 3 г. Светлого Нетесова Н. А.
Обобщения ( generics) Обобщения – это классы, структуры, интерфейсы и методы, в которых некоторые типы сами являются параметрами. Эти типы перечисляются.
Платформа Microsoft.NET Кафедра системного программирования С.-Петербургского государственного университета Андрей А.Терехов,
Высокоуровневые методы информатики и программирования Лекция 8 Свойства и операции классов.
Веб-технологии и современные средства разработки УЦ ВГТУ & SoftLine Academy.
8/13/2012dotSITE - XP and MSF development in.NET1 Проектирование и создание приложений на базе Visual Studio.NET Andrew Filev Team leader dotSITE Ltd.Co.
ДонНУ, кафедра КТ, проф.В.К.Толстых Платформа.NET Widows-приложения в среде Delphi for.NET Из цикла лекций «Internet-технологии разработки приложений»
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Транксрипт:

Лекция 6 Интеграция существующих приложений в.NET –Преимущества платформы.NET для существующих приложений –Различные способы интеграции существующих приложений в.NET –Проблемы преобразования программ при переходе на платформу.NET –Влияние платформы.NET на задачи реинжиниринга

Зачем нужна миграция приложений? Скорее всего,.NET будет популярной платформой для новых разработок Однако, в мире уже существует более 200 млрд. строк активно используемого кода Поэтому общий успех.NET (впрочем, как и любой другой новой платформы) во многом будет зависеть от успешности миграции существующих приложений

Другие пути Think Java, breath Java… Dont upgrade or downgrade your languages – sidegrade to Java instead! I dont see why anybody would use anything but Java today. Scott McNealy, 1999

Преимущества.NET для существующих систем Неизменность языка программирования: –сохранение инвестиций (обучение, окружение) –психологические преимущества Возможность использовать старую систему как базу для новых разработок Межъязыковое взаимодействие и улучшенные возможности для повторного использования –без привязки к тому или иному языку программирования или компонентной модели

Преобразование С++ Перекомпиляция приложения с использованием опции /CLR Переписывание системных сервисов (использование классов.NET) Переход к managed code (использование C++ managed extensions) Переход к verifiable code (уничтожение адресной арифметики, явная запись boxing/unboxing и т.д.)

Переход к managed C++ Процесс перехода может быть постепенным Однако существуют трудности взаимодействия между managed и unmanaged code (см. напр. распространение исключений, сборка мусора) Переход к управляемым указателям должен производиться одновременно для всех связанных указателей (нельзя использовать управляемый указатель в неуправляемом коде) Трудности использования сложных типов данных (ограничение названия: 256 символов!)

VB 6.0 to VB.NET VB 6.0 является самым популярным языком программирования в мире (более 6 миллионов программистов) Ограниченность VB 6.0: –отсутствие наследования –отсутствие обработки исключений –полная синхронность исполнения и т.д. В итоге, VB.NET оказался скорее новым языком, чем усовершенствованием старого

Преобразование программ на VB Код сохраняется Синтаксис изменяется Предупреждения Классы совместимости

Преобразование форм VB ActiveX ® controls User controls Intrinsic controls Compatibility class

Проблемы перевода 'Visual Basic.NET Dim t1 As Type1 Dim t2 As Type2 'UPGRADE_ISSUE: LSet can't assign a UDT of one type to another LSet t1 = t2 'Visual Basic.NET Dim t1 As Type1 Dim t2 As Type2 'UPGRADE_ISSUE: LSet can't assign a UDT of one type to another LSet t1 = t2 'VB6 Dim t1 As Type1 Dim t2 As Type2 LSet t1 = t2 'VB6 Dim t1 As Type1 Dim t2 As Type2 LSet t1 = t2 Не все удается автоматически перевести. В этих случаях генерируются комментарии, по которым программист может разобраться в проблеме и переписать фрагмент кода:

Отчет о преобразовании

Что не преобразовывается? ActiveX documents, DHTML ActiveX designer pages Доступ к данным с помощью DAO и RDO OLE, shape controls негоризонтальные и невертикальные линии Кодовые страницы (увы!) Устаревшие конструкции языка: LSet, ObjPtr, VarPtr, StrPtr DefInt, DefBool, DefObj, DefStr и т.д. Option Base 0/1 GoSub and Return, Computed Goto

Рекомендации по программированию True / False –Используйте True вместо – 1 –Используйте тип Boolean для логических значений Dim i As Integer Dim b As Boolean i = True ' b = True 'GOOD Dim i As Integer Dim b As Boolean i = True ' b = True 'GOOD 2. Не используйте целые как булевские и т.п. If x And y Then' If x 0 And y 0 Then'GOOD If x And y Then' If x 0 And y 0 Then'GOOD

Рекомендации по программированию Dim dbl As Double Dim dat As Date dat = Now ' GOOD dbl = dat' dbl = DateAdd(d, 1, dbl)' Dim dbl As Double Dim dat As Date dat = Now ' GOOD dbl = dat' dbl = DateAdd(d, 1, dbl)' Dim a(10) As Integer' GOOD Dim a(1 to 10) As Integer' Dim a(10) As Integer' GOOD Dim a(1 to 10) As Integer' Используйте тип Date для хранения даты Используйте массивы от нуля Массивы от единицы преобразуются в специальный класс Не используйте Option Base 1!

Рекомендации по программированию If IsNull( rs!Field1 ) Then'GOOD... End If If IsNull( rs!Field1 ) Then'GOOD... End If В VB.NET функции и операторы не принимают и не возвращают Null; используйте функциюIsNull() Form1.BorderStyle = vbSizable 'Good Form1.BorderStyle = 2 ' Form1.BorderStyle = x ' myBool = True 'Good myBool = -1 ' Form1.BorderStyle = vbSizable 'Good Form1.BorderStyle = 2 ' Form1.BorderStyle = x ' myBool = True 'Good myBool = -1 ' Используйте константы, а не примитивные значения!

Рекомендации по программированию Dim o As Object Dim t As TextBox Set o = Me.Text1 ' o = "Hello World" ' Set t = Me.Text1'GOOD t.Text = "Hello World" 'GOOD Dim o As Object Dim t As TextBox Set o = Me.Text1 ' o = "Hello World" ' Set t = Me.Text1'GOOD t.Text = "Hello World" 'GOOD Указывайте явно свойства, используемые по умолчанию; используйте раннее связывание: Timer1.Enabled = False 'Good Timer1.Interval = 0 ' Timer1.Enabled = False 'Good Timer1.Interval = 0 ' Как правильно отключить таймер:

JUMP to.NET JUMP = Java Users Migration Path Ориентировано на программистов, использующих Visual J++ (по данным исследований Microsoft, они составляют 26% от общего числа программистов на Java) О платформонезависимости Java: 62% программистов на Java делают платформо- зависимые решения В качестве решения предлагается миграция в C#

Схема перехода к.NET Adopts.NET Adopts.NET Class Library Support JUMP Interoperability Layer Class Library Support JUMP Interoperability Layer Tools Build Existing Solutions Binary Component Conversion Visual Studio.NET Integration Tools Build Existing Solutions Binary Component Conversion Visual Studio.NET Integration Migration to.NET Source Code Conversion to C# Migration to.NET Source Code Conversion to C# 1 st Phase 2 nd Phase

Различия между Java и C# Примитивные типы C# могут быть непосредственно использованы как объекты (в Java требуется специальный класс-оболочка) В Java параметры всегда передаются по значению; в C# можно использовать ref и out Свойства, индексаторы, делегаты, контроль переполнения, ненадежный код - только в C# import в Java = using + /r:LibName в C# При сравнении строк в C# сравниваются значения, а не указатели

Другие языки программирования Простые языки программирования: –появление полного компилятора для.NET –введение объектно-ориентированных конструкций в стандарт языка Сложные языки программирования: –преодоление ограничений платформы.NET для поддержки множественного наследования, вложенных процедур, настраиваемых модулей и т.п.

Другие подходы к интеграции приложений COM interoperability –COM to.NET –.NET to COM Использование вызовов функций из DLL

Совместимость по данным в.NET Runtime Components Platform Compilers Runtime Type System C#VBC++ … CLR использует динамическую систему типов и создает компоненты, совместимые по типам данных

C++ MSVCRT MFC/ATL Type System Standard Binary Standard C#VB Runtime Execution Sys Runtime Type Sys COM Binary Std COM interoperability services

Необходимость взаимодействия COM и.NET Взаимодействие необходимо для сохранения вложений в COM-приложения Последовательная пошаговая миграция Некоторые приложения никогда не будут переписываться под.NET Необходимо двустороннее взаимодействие

Сравнение двух моделей Unmanaged Code Binary standard Type Libraries Immutable Types DLL Hell Interface based HResults Guids Managed Code Type Standard Metadata Resilient Bind Assemblies Object based Exceptions Strong Names

.NET to COM interoperability Runtime Callable Wrapper Object IFoo IUnknown Common Language Runtime COM Server Client Reference Counted Traced Reference

Использование типов COM в.NET Необходимо создать сборку, содержащую определения типов, созданных в COM-компоненте Затем необходимо добавить ссылку в Visual Studio –Путем добавления ссылки (reference) в VS –Путем использования утилиты TlbImp (type library importer) TLBIMP MyLib.tlb –Можно определить тип вручную При использовании сборки из других приложений необходимо явно сослаться: CSC /t:library /r:MyLib.dll MyCode.cs После этого типы данных из COM можно использовать как обычные управляемые типы: –Можно создавать экземпляры с помощью new –Можно ловить исключения –Можно даже расширять типы данных и наследовать от них!

Трансляция сигнатур типов COM Method Signature HRESULT FormatDate(BSTR s, DATE d, [out, retval] int *retval); int FormatDate(String s, DateTime d);.NET Method Signature

Преобразование типов данных DATE System.DateTime BSTR System.String SafeArray(int) int[] OLECOLOR System.Drawing.Color CURRENCY System.Decimal VARIANT System.Object

Использование СОМ-типов в.NET Не надо думать о типах как о СОМ-типах: –Никакого подсчета ссылок, Idispatch, Hresults –Никаких Connection Points, Guids и т.д. Failure HResults автоматически отображаются в исключения Перечисления автоматически отображаются в IEnumVariant ConnectionPoints автоматически отображаются в представители (delegates)

COM to.NET interoperability IFoo IDispatch IUnknown COM Callable Wrapper Object IFoo Common Language Runtime Client COM Client Reference Counted Traced Reference

Использование типов.NET в COM Обратная совместимость + взаимодействие Необходимо создать библиотеку типов COM –TLBEXP MyLib.dll Затем надо сослаться на TLB: –#import в Visual C –Project/Reference в Visual Basic 6.0 Наконец, надо проинсталлировать и зарегистрировать сборку: –RegAsm MyLib.dll (beta 1) –GACUTIL /ir:Mylib.dll (beta 2)

Информация к размышлению Не все типы.NET доступны в COM: –Только public типы и переменные –Статически члены недоступны –Создаваемые классы должны иметь конструктор по умолчанию –Функциональность должна быть доступна через интерфейсы GUID автоматически генерируются при экспорте –На основе имен сборки и типа –На основе полного определения интерфейса Сборка должна быть доступна во время исполнения –Сборка должна находиться в каталоге приложения или быть доступна еще каким-то образом

Использование пользовательских атрибутов Using System.Runtime.InteropServices [Guid(…), InterfaceType(ComInterfaceType.IsIUnknown)] Interface IFooBar { [DispId(64)] int Format( [MarshalAs(LPStr)] String s) } Пользовательские атрибуты могут использоваться для того, чтобы повлиять на результаты работы утилиты TlbExp:

Как все это работает Все объекты.NET заворачиваются в COM Callable Wrapper (CCW), который реализует: –IUnknown –IDispatch –ITypeInfo –IProvideClassInfo –IConnectionPoint, etc. CCW также управляет экземплярами, исключениями, преобразованием сигнатур и т.д. CCW.Net Class

Использование вызовов DLL Object Common Language Runtime Unmanaged DLL Client

Пример вызова функции из DLL [StructLayout(LayoutKind.Sequential)] Public struct OSInfo ( uint MajorVersion; uint MinorVersion; String VersionString; } public class Win32API { [DllImport(User32.dll)] public static extern Boolean GetVersionEx (OSInfo osi); }

Производительность вызовов из DLL Естественно, не самая лучшая (накладные расходы - около 30 команд) Маршалинг данных также ухудшает производительность (изоморфные типы дешевле) Chunky calls vs. chatty calls

Литература к лекции T.Pattison Visual Basic.NET: New Programming Model and Language Enhancements Boost Development Power, MSDN Magazine, Feb