Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемdotsite.ru
1 Лекция 6 Интеграция существующих приложений в.NET –Преимущества платформы.NET для существующих приложений –Различные способы интеграции существующих приложений в.NET –Проблемы преобразования программ при переходе на платформу.NET –Влияние платформы.NET на задачи реинжиниринга
2 Зачем нужна миграция приложений? Скорее всего,.NET будет популярной платформой для новых разработок Однако, в мире уже существует более 200 млрд. строк активно используемого кода Поэтому общий успех.NET (впрочем, как и любой другой новой платформы) во многом будет зависеть от успешности миграции существующих приложений
3 Другие пути 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
4 Преимущества.NET для существующих систем Неизменность языка программирования: –сохранение инвестиций (обучение, окружение) –психологические преимущества Возможность использовать старую систему как базу для новых разработок Межъязыковое взаимодействие и улучшенные возможности для повторного использования –без привязки к тому или иному языку программирования или компонентной модели
5 Преобразование С++ Перекомпиляция приложения с использованием опции /CLR Переписывание системных сервисов (использование классов.NET) Переход к managed code (использование C++ managed extensions) Переход к verifiable code (уничтожение адресной арифметики, явная запись boxing/unboxing и т.д.)
6 Переход к managed C++ Процесс перехода может быть постепенным Однако существуют трудности взаимодействия между managed и unmanaged code (см. напр. распространение исключений, сборка мусора) Переход к управляемым указателям должен производиться одновременно для всех связанных указателей (нельзя использовать управляемый указатель в неуправляемом коде) Трудности использования сложных типов данных (ограничение названия: 256 символов!)
7 VB 6.0 to VB.NET VB 6.0 является самым популярным языком программирования в мире (более 6 миллионов программистов) Ограниченность VB 6.0: –отсутствие наследования –отсутствие обработки исключений –полная синхронность исполнения и т.д. В итоге, VB.NET оказался скорее новым языком, чем усовершенствованием старого
8 Преобразование программ на VB Код сохраняется Синтаксис изменяется Предупреждения Классы совместимости
9 Преобразование форм VB ActiveX ® controls User controls Intrinsic controls Compatibility class
10 Проблемы перевода '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 Не все удается автоматически перевести. В этих случаях генерируются комментарии, по которым программист может разобраться в проблеме и переписать фрагмент кода:
11 Отчет о преобразовании
12 Что не преобразовывается? 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
13 Рекомендации по программированию 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
14 Рекомендации по программированию 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!
15 Рекомендации по программированию 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 ' Используйте константы, а не примитивные значения!
16 Рекомендации по программированию 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 ' Как правильно отключить таймер:
17 JUMP to.NET JUMP = Java Users Migration Path Ориентировано на программистов, использующих Visual J++ (по данным исследований Microsoft, они составляют 26% от общего числа программистов на Java) О платформонезависимости Java: 62% программистов на Java делают платформо- зависимые решения В качестве решения предлагается миграция в C#
18 Схема перехода к.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
19 Различия между Java и C# Примитивные типы C# могут быть непосредственно использованы как объекты (в Java требуется специальный класс-оболочка) В Java параметры всегда передаются по значению; в C# можно использовать ref и out Свойства, индексаторы, делегаты, контроль переполнения, ненадежный код - только в C# import в Java = using + /r:LibName в C# При сравнении строк в C# сравниваются значения, а не указатели
20 Другие языки программирования Простые языки программирования: –появление полного компилятора для.NET –введение объектно-ориентированных конструкций в стандарт языка Сложные языки программирования: –преодоление ограничений платформы.NET для поддержки множественного наследования, вложенных процедур, настраиваемых модулей и т.п.
21 Другие подходы к интеграции приложений COM interoperability –COM to.NET –.NET to COM Использование вызовов функций из DLL
22 Совместимость по данным в.NET Runtime Components Platform Compilers Runtime Type System C#VBC++ … CLR использует динамическую систему типов и создает компоненты, совместимые по типам данных
23 C++ MSVCRT MFC/ATL Type System Standard Binary Standard C#VB Runtime Execution Sys Runtime Type Sys COM Binary Std COM interoperability services
24 Необходимость взаимодействия COM и.NET Взаимодействие необходимо для сохранения вложений в COM-приложения Последовательная пошаговая миграция Некоторые приложения никогда не будут переписываться под.NET Необходимо двустороннее взаимодействие
25 Сравнение двух моделей 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
26 .NET to COM interoperability Runtime Callable Wrapper Object IFoo IUnknown Common Language Runtime COM Server Client Reference Counted Traced Reference
27 Использование типов COM в.NET Необходимо создать сборку, содержащую определения типов, созданных в COM-компоненте Затем необходимо добавить ссылку в Visual Studio –Путем добавления ссылки (reference) в VS –Путем использования утилиты TlbImp (type library importer) TLBIMP MyLib.tlb –Можно определить тип вручную При использовании сборки из других приложений необходимо явно сослаться: CSC /t:library /r:MyLib.dll MyCode.cs После этого типы данных из COM можно использовать как обычные управляемые типы: –Можно создавать экземпляры с помощью new –Можно ловить исключения –Можно даже расширять типы данных и наследовать от них!
28 Трансляция сигнатур типов COM Method Signature HRESULT FormatDate(BSTR s, DATE d, [out, retval] int *retval); int FormatDate(String s, DateTime d);.NET Method Signature
29 Преобразование типов данных DATE System.DateTime BSTR System.String SafeArray(int) int[] OLECOLOR System.Drawing.Color CURRENCY System.Decimal VARIANT System.Object
30 Использование СОМ-типов в.NET Не надо думать о типах как о СОМ-типах: –Никакого подсчета ссылок, Idispatch, Hresults –Никаких Connection Points, Guids и т.д. Failure HResults автоматически отображаются в исключения Перечисления автоматически отображаются в IEnumVariant ConnectionPoints автоматически отображаются в представители (delegates)
31 COM to.NET interoperability IFoo IDispatch IUnknown COM Callable Wrapper Object IFoo Common Language Runtime Client COM Client Reference Counted Traced Reference
32 Использование типов.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)
33 Информация к размышлению Не все типы.NET доступны в COM: –Только public типы и переменные –Статически члены недоступны –Создаваемые классы должны иметь конструктор по умолчанию –Функциональность должна быть доступна через интерфейсы GUID автоматически генерируются при экспорте –На основе имен сборки и типа –На основе полного определения интерфейса Сборка должна быть доступна во время исполнения –Сборка должна находиться в каталоге приложения или быть доступна еще каким-то образом
34 Использование пользовательских атрибутов Using System.Runtime.InteropServices [Guid(…), InterfaceType(ComInterfaceType.IsIUnknown)] Interface IFooBar { [DispId(64)] int Format( [MarshalAs(LPStr)] String s) } Пользовательские атрибуты могут использоваться для того, чтобы повлиять на результаты работы утилиты TlbExp:
35 Как все это работает Все объекты.NET заворачиваются в COM Callable Wrapper (CCW), который реализует: –IUnknown –IDispatch –ITypeInfo –IProvideClassInfo –IConnectionPoint, etc. CCW также управляет экземплярами, исключениями, преобразованием сигнатур и т.д. CCW.Net Class
36 Использование вызовов DLL Object Common Language Runtime Unmanaged DLL Client
37 Пример вызова функции из 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); }
38 Производительность вызовов из DLL Естественно, не самая лучшая (накладные расходы - около 30 команд) Маршалинг данных также ухудшает производительность (изоморфные типы дешевле) Chunky calls vs. chatty calls
39 Литература к лекции T.Pattison Visual Basic.NET: New Programming Model and Language Enhancements Boost Development Power, MSDN Magazine, Feb
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.