Известия о том, что в будущей версии VB 7 появится множество сюрпризов (см. PC Week/RE, № 11/2000, с. 23), вызвали повышенный интерес пользователей этого инструментария. Официальные сообщения Microsoft по поводу ожидаемых новшеств носят пока предварительный характер, и основные сведения поступают от специалистов, которые могли познакомиться в VB 7 на закрытых презентациях, проходивших в рамках ряда специализированных конференций разработчиков (VBITS, Microsoft DevCon).Так что вся приведенная ниже информация носит предварительный характер, но, судя по многим признакам, она весьма достоверно отражает будущие инновации.
Конечно же закрытые демонстрации, утечка данных о возможных новшествах, слухи и пр. - все это хорошо продуманная маркетинговая акция, в ходе которой Microsoft изучает необходимость тех или иных изменений, в том числе определяет, с отсутствием каких функций мириться уже нельзя (иначе это может вывести из себя даже ярых поклонников VB). Вся история VB представляет собой классический пример строго дозированного расширения функциональности системы (с точки зрения включения в принципе давно известных языковых средств). Например, только в VB 3 появилась возможность обязательного объявления переменных, в VB 4 - создания повторно используемых программных компонентов, в VB 5 - компиляция в настоящий машинный код и разработка элементов управления ActiveX.
VB как составная часть Visual Studio
По мнению Microsoft, главной задачей сегодня является быстрое построение надежных, масштабируемых, многоуровневых Web-приложений. Поэтому упор при подготовке очередной версии пакета Visual Studio сделан на необходимости максимально упростить создание Web-приложений масштаба предприятия и дальнейшую интеграцию входящих в него инструментов.
Рис.1. Создание Web-формы за четыре шага
Развитие Visual Studio 7.0 корпорация пока связывает с тремя ключевыми продуктами, которые позиционирует следующим образом:
- Visual Basic - универсальный инструмент быстрой разработки;
- Visual C++ - средство написания высокоэффективных и мощных приложений;
- Visual InterDev - инструмент для создания Web-приложений.
При особой нацеленности Microsoft на Web-приложения, возможно, Visual InterDev станет частью интегрированной среды VS 7.0. Разумеется, встроенный HTML-редактор будет поддерживать технологию IntelliSense (подсказка синтаксиса функций, методов и свойств, завершение ввода тегов). В инструментах VS 7 должны быть реализованы две новые Web-технологии - Web Forms и Web Services, описание которых сейчас дается применительно к VB 7.
Объектно-ориентированная модель
Главная и давно ожидаемая новость о VB 7 - реализация в новой версии полной объектно-ориентированной модели языка, которая подразумевает наличие трех обязательных механизмов - инкапсуляции, полиморфизма и наследования. Первые два были реализованы в предыдущих версиях и получат развитие в новой, последний - появится впервые.
Инкапсуляция. Идея заключается в возможности создания скрытого набора процедур, формирующих некий программный интерфейс. Другой код может обращаться к ним, не вдаваясь в подробности их внутренней реализации. Приведенный здесь код демонстрирует возможность “сокрытия” отдельных свойств объекта:
Protected cName As String
Protected Function ChangeName(NewName)
Me.cName = NewName
End Function
Полиморфизм. Возможность иметь несколько объектов разного типа, но с одинаковыми методами. Это позволяет писать код, вызывающий нужный метод в зависимости от используемого в данный момент объекта. Например, это может выглядеть так:
Class Employee
Function PayEmployee
‘ почасовая оплата
PayEmployee = Hours * HourlyRate
End Function
Class CommissionedEmployee
Inherits Employee
Function PayEmployee
‘ сдельная оплата
PayEmployee = BasePay + Commissions
End Function
Таким образом, с помощью механизма наследования и замены родительского метода мы создали две разные функции (с одним названием) для классов Employee и CommissionedEmployee.
Наследование. Это одно из ключевых понятий объектно-ориентированного программирования - возможность использования (в том числе расширения) поведения чужого объекта. Упрощенно говоря, можно создать объект Продукт, а затем на его основе объекты Программный Продукт и Технический Продукт. Оба новых объекта будут наследовать свойства и методы объекта Продукт, при этом можно расширить или изменить поведение наследующего объекта.
Теперь для добавления процедур уже существующего класса допускается применение ключевого слова Inherits:
Class1
Function GetCustomer()
...
End Function
Class2
Inherits Class1
Function GetOrders()
...
End Function
Замена родительского метода выполняется по ключевому слову Overrides.
Другие новшества языка
Параметрические Конструкторы. При создании объекта часто бывает крайне желательно передать ему некоторые данные для начальной установки его свойств. Сейчас для этого требуются специальные процедуры. В VB 7 конструкторы позволят передавать начальные данные в момент организации объектов.Free-threaded (Многопоточность). Это комплексная концепция поддержки одновременного выполнения более одного потока заданий. Подобный режим совершенно необходим в случае масштабируемых серверных компонентов и может быть полезен для реализации пользовательского интерфейса. Создание таких вычислительных потоков выглядит примерно следующим образом:
Sub CreateMyThread()
Dim b As BackGroundWork
Dim t As Thread
Set b = New BackGroundWork
Set t = New Thread(New ThreadStart (AddressOf b.Doit))
t.Start
End Sub
Class BackGroundWork
Sub Doit()
...
End Sub
End Class
Инициализаторы. Тут все очень просто: в VB отсутствовала явно необходимая и давным-давно реализованная в других языках функция начальной инициализации переменной при ее определении. Overloading. В русском языке нет термина в данном контексте - использование одного и того же идентификатора для обозначения разных процедур, нужная процедура выбирается в зависимости от числа и типа параметров.Это особенно полезно при создании одного свойства, поддерживающего разные типы аргументов: применение в этом случае типа Variant неудобно хотя бы потому, что характер обработки данных может зависеть от их типа. Описываются подобные процедуры так:
Overloads Sub Display (theString As String)
...
Overloads Sub Display (theInteger As Integer)
Общие члены. Это методы или переменные, доступные для всех экземпляров класса (каждого объекта, базирующегося на данном классе).
Структурная обработка особых ситуаций. Это структура для обработки ошибок, которая уже имеется во многих языках. Она должна заменить старую и весьма негибкую (точнее, не наглядную) конструкцию On Error Goto|Resume| Next. Новый блок содержит ключевые слова Try, Catch, Finally:
Try ‘начало некоторой операции
Open “TestFile” For Output As #1
Write #1, SomeInformation$
Catch ‘в случае ошибки выполняется этот код:
Kill “TestFile”
Finally ‘ при отсутствии ошибки выполняется этот код:
Close #1
End Try
Контроль типов данных - запрет неявного преобразования типов с помощью нового оператора Option Strict. Абсолютно необходимый режим для создания надежных программ и снижения затрат на отладку приложений.
Наследование пользовательского интерфейса. VB 7 будет включать наследование форм, т. е. создание новых форм на основе некоторых шаблонов. В отличие от существующего сегодня механизма подключения новых форм на основе шаблонов теперь механизм наследования будет поддерживаться автоматически: изменения в родительском шаблоне будут отражаться в дочерних формах.
Интересные мелочи
По некоторым сведениям, VB и VC++ будут иметь единую среду разработки. Более достоверно, что в VB 7 включен новый редактор меню. По общим оценкам специалистов, которые “вживую” работали с ним, модернизированная версия Menu Editor стала намного удобнее и позволяет, в частности, создавать меню визуальными методами.Еще одно важное дополнение касается управления процедурой компоновки исполняемого модуля. Сегодня многие VB-программисты подзабыли, что процедура создания исполняемого модуля или DLL состоит на самом деле из двух разных операций: компиляции (трансляции исходных модулей проекта в объектные модули) и компоновки (стыковки всех объектных модулей в один загрузочный). В VB до сих пор не было подобного разделения, так как Microsoft не позволяла подключать к проекту объектные модули, откомпилированные вне данного проекта. Теперь нам обещают разрешить компоновку с подключением внешних объектных модулей и объектных (статических) библиотек. (Только не нужно путать объектные библиотеки и библиотеки объектов - это разные вещи.)
Рис. 2. Архитектура приложения Web Services
ASP + Web Forms
Речь идет не просто о конструировании Web-форм, а о новой технологии создания Web-приложений всеми инструментами Visual Studio. Microsoft планирует, что Web Forms станет преемницей ASP (InterDev) и WebClass (VB), реализованных сегодня в InterDev и VB.Страница Web Forms состоит из двух частей: шаблона в виде HTML-файла и файла с программным кодом. Такое разделение, в частности, повышает скорость действия программы, так как используется режим выполнения машинного кода (DLL), а не интерпретации скрипта. Кроме того, для написания кода можно применять любой язык программирования и повторно использовать имеющиеся компоненты. Создавать HTML-шаблоны можно с помощью встроенного редактора или внешнего, специализированного. Подразумевается, что программисты будут формировать Web-интерфейсы почти так же, как они сейчас организуют формы Windows (визуальный интерфейс и код обработки событий). Код для Web-форм постоянно находится на сервере, а HTML генерируется “на лету”. Элементы управления Web-форм преобразуются в HTML-объекты по мере выполнения кода на сервере. Как обещает Microsoft, в VB 7.0 встроят “первоклассный” HTML-редактор, который войдет в состав Visual Studio и будет поддерживать работу с различными версиями HTML (например, 3.2, 4.0, или XML).
Web Services
Это некая принципиально новая платформно-независимая технология, связанная с использованием стандарта XML и протокола SOAP, которая будет широко интегрирована со средствами разработки. Основная идея заключается в создании компонентов уровня бизнес-логики, взаимодействующих с внешними объектами с помощью стандартных Web-протоколов.
Упрощенно говоря, в данном случае приложение будет обращаться за выполнением некоторой функции не к DLL или ActiveX DLL, а к компоненту на удаленном компьютере с помощью Интернет-протокола. Выглядит это примерно следующим образом.
1. Разработчик создает проект типа Web Service с названием RatingService, добавляет в него модуль класса с именем ClassComponent и вписывает в него функцию для решения некоторой задачи:
Public Function GetRate (ByVal ticker As String) As String
‘ Решаем - покупать или продавать акции
If ticker = “ACME” Then
GetRate = “Покупать!”
Else
GetRate = “Продавать!”
End If
End Function
2. При построении проекта с данной функцией VB автоматически сформирует XML-описание этой функции и опубликует его на Web:
<?xml version=’1.0’ ?>
<methods href=’http://Kolesov/RatingService’>
<method name=’GetRate’ href = ‘GetRate’>
<request>
<param dt=’string’>ticker</param>
</request>
</method>
</methods>
3. Теперь вы можете обратиться к этой функции с помощью обычного браузера (с включенной в него XML-поддержкой). Наберите такой URL - http://kolesov/RatingService/ClassComponent.methods/GetRate?ticker=AMCE - и вы получите в окне браузера результат:
<?xml version=’1.0’ ?>
<response>Покупать</response>
Созданные средства Web Services можно также подключать к VB-проекту. Причем эти функции могут быть реализованы, например, с помощью Unix-инструментов и работать в среде Web-сервера Apache.
Вполне вероятно, что список новшеств VB 7.0 не будет ограничен возможностями, о которых говорилось в этой статье. Например, в августе стало известно, что набор инструментов Microsoft будет называться Visual Studio.NET+
Самую свежую информацию Microsoft о будущей версии VS.NET можно найти по адресу: http://msdn.microsoft.com/vstudio/nextgen/.