Модель компонентных объектов (Component Object Model, COM) — объектно-ориентированная архитектура
для создания объектов, многократно используемых разными приложениями. Эта архитектура
может применяться для написания объектов, доступных из других программных сред,
например из Microsoft Visual Basic и Microsoft Visual C+ + , a также из приложений,
подобных Microsoft Office. Модель СОМ предоставляет стандартный протокол для
соединения объектов между собой, даже если они разработаны на разных языках
программирования. После установления соединения объекты взаимодействуют через
стандартный интерфейс.
Visual J++
поддерживает создание и импорт СОМ-объектов. Создавая СОМ-объекты на Visual
J++, Вы предоставите пользователям многократно используемые компоненты, применимые
в произвольном числе приложений, в том числе написанных на разных языках. Возможность
импорта СОМ позволяет применять компоненты других приложений для расширения
возможностей своих WFC-приложений. Например, можно использовать СОМ-объекты,
которые Microsoft Office предоставляет для достуца к функциям проверки правописания
в Microsoft Word или к математическим функциям в Microsoft Excel. Применяя модель
СОМ в своих проектах на Visual J++, Вы добьетесь подлинно многократного применения
кода при разработке своих приложений. Из этой главы Вы узнаете:
Visual J++
упрощает создание СОМ-объектов благодаря удобному интерфейсу для выбора тех
классов проекта, которые надо использовать в качестве СОМ-классов. Для создания
СОМ-объекта можно применять
любой открытый
неабстрактный класс. Visual J++ использует общедоступные компоненты класса в
качестве интерфейса к объекту СОМ. При сборке проекта классы, выбранные для
использования в качестве СОМ-классов, создаются и регистрируются в системе как
СОМ-объекты. После создания СОМ-объектов поместите их в COM DLL, чтобы получить
доступ к ним из других программных сред или из приложений с поддержкой СОМ.
В данном
примере создается СОМ-объект, размещенный в COM DLL, который предоставляет статистические
функции, связанные со спортом. Вы научитесь:
Visual J++
предоставляет шаблон COM DLL, который позволяет создать проект с классом, уже
зарегистрированным в качестве СОМ-клас-са. Этот шаблон настроен и на размещение
проекта в COM DLL. Подробности о создании проектов COM DLL с использованием
этого шаблона см. в разделе «Создание COM DLL» в главе 1 «Создание
проектов». Шаблон COM DLL уже имеется, но в здесь он не используется,
ибо важно осознать, как в произвольном проекте выбрать класс, который станет
СОМ-классом. В этом примере создается пустой проект и затем в него добавляется
класс Java, который и будет СОМ-объектом.
Примечание
До начала следующей процедуры Закройте все открытые проекты. (Выберите
команду Close All из меню File.)
Чтобы
создать пустой проект:
Проект появится
в Project Explorer. Он не содержит ни одного файла.
Чтобы
добавить класс в проект:
Чтобы клиенты
COM DLL могли управлять СОМ-объектом, в СОМ-класс добавляются открытые методы.
В Visual J++ все открытые методы Java-класса, включая унаследованные от суперкласса,
доступны через интерфейс СОМ-объекта. В данном примере в класс добавляются два
метода. Они предоставляют пользователю спортивные статистические функции.
Первый открытый
метод, который предоставляет объект Stats, — win-LossPercentage. Он вычисляет
процент побед из всех проведенных командой игр.
Чтобы
добавить метод winLossPercentage
public float winLossPercentage(int
gamesPlayed, int gamesWon)
{
float returnValue = gamesWon
Я gamesPlayed * .100f;
if (returnValue == 0.0f)
return 1.0f;
else
return returnValue;
}
В этом коде
применяется оператор деления по модулю, что позволяет получить остаток от деления
числа побед на количество всех проведенных игр. Полученное значение затем умножается
на .100f для преобразования к типу, который обычно используется на табло стадиона.
После определения значения идет проверка на равенство нулю, что означает отсутствие
остатка, т. е. что команда выиграла все свои игры. Если это так, то возвращается
значение l.0f. В противном случае возвращается вычисленное значение.
Объект Stats
также должен предоставить метод goalsAgainstAverage с модификаторами final и
public. Этот метод вычисляет среднее число пропущенных или забитых голов. Оно
определяется делением числа голов на число проведенных игр.
Чтобы
добавить метод goalsAgainstAverage:
public float goalsAgalnstAverage(int
gamesPlayed, int goalsAllowed)
{
return (float) goalsAllowed/gamesPlayed;
}
В этом коде
число голов делится на количество проведенных игр, и результат
приводится к типу float.
Определение
класса в качестве класса СОМ
После создания
класса и определения открытых методов, доступных через СОМ, необходимо определить
класс в качестве СОМ-класса. Для выбора классов из проекта, которые будут СОМ-классами,
используйте вкладку COM Classes в диалоговом окне Project Properties.
Примечание
Если не нужно определять несколько СОМ-классов, то воспользуйтесь
диалоговым окном Class Properties. Для его вывода щелкните правой кнопкой
мыши в Class Outline имя класса и выберите команду меню Class Properties.
В появившемся диалоговом окне отметьте флажок COM Class.
Чтобы
определить класс в качестве СОМ-класса:
Visual J++
добавит тэг комментария @com.register сверху в начало определения класса. При
компиляции проекта эта информация будет использована компилятором для регистрации
класса в реестре в качестве СОМ-класса.
Для доступа
других приложений к СОМ-объекту он размещается в COM DLL.
Примечание
Для распространения объекта СОМ по Интернету разместите его в САВ-файле,
а не в COM DLL.
Чтобы
поместить объект СОМ в COM DLL:
В процессе
сборки Visual J++ помещает СОМ-классы в COM DLL и регистрирует саму DLL и СОМ-классы
внутри нее как объекты СОМ. Когда классы находятся в реестре, они доступны для
других приложений. Подробнее об импортировании объектов СОМ в Visual J+ + см.
следующий раздел «Импорт объектов СОМ».
Чтобы
собрать проект:
Примечание
Для выполнения дополнительных действий во время регистрации СОМ-класса
можно определить в этом классе пользовательский метод под названием onCOMRegister.
Такой метод можно применять, например, для регистрации надстройки (add-in) в
списке надстроек Visual J++. Этот метод вызывается средой Visual J++ во время
процесса регистрации СОМ-классов и самой COM DLL. Вот как он выглядит:
public static void onCOMRegister(boolean register)
{
// Добавьте здесь произвольный код регистрации
}
СОМ-объекты
представляют собой прекрасный способ инкапсуляции функциональных возможностей
и повторного использования их многими приложениями. СОМ-объекты используют и
для предоставления другим приложениям доступа к специфическим возможностям Вашего
приложения или для создания набора процедур, которые требуется применять в нескольких
приложениях. Поскольку модель СОМ не зависит от языка, СОМ-объекты легко интегрируются
в приложения, разработанные на самых разных языках программирования. Visual
J+ + используют и для просмотра и импорта СОМ-объектов, зарегистрированных в
Вашей системе. В процессе импорта Visual J++ создает классы-оболочки, чтобы
можно было обращаться к СОМ-объектам так же, как и к другим Java-объектам.
В данном
примере импортируется СОМ-объект, создание которого описано в этой главе в разделе
«Создание объектов СОМ». Вы научитесь:
Примечание
Предполагается, что СОМ-объект был создан в соответствии с инструкцией
из раздела «Создание объектов СОМ» и что все открытые проекты закрыты.
При импорте
СОМ-объекта Visual J++ создает каталоги внутри проекта и добавляет в них классы-оболочки
для доступа к СОМ-объекту в этих каталогах. Для импорта СОМ-объекта необходим
действующий Java-проект.
Чтобы
создать проект:
В Project Explorer
появится свернутое изображение проекта.
В проект
добавится файл с именем по умолчанию Forml.java.
После создания
проекта в него можно импортировать СОМ-объекты. СОМ-объект следует импортировать
в каждый проект, где нужен доступ к такому объекту. При импорте СОМ-объекта
в проект Visual J+ + создает классы-оболочки, которые предоставляют интерфейс
для доступа к объекту. Эти классы-оболочки добавляются в пакеты в каталоге проекта.
(В зависимости от числа объектов, хранящихся в COM DLL, Visual J++ может создать
несколько пакетов )
Примечание
При получении доступа к конкретному СОМ-объекту из других проектов
можно обойтись без создания оболочки в каждом проекте, поместив классы-оболочки
в Classpath.
Чтобы импортировать СОМ-объект:
Для данного примера
выберите объект Stats.
Visual J++
добавит каталоги пакетов и классы-оболочки для каждого объекта СОМ, содержащегося
в выбранной COM DLL.
Добавление
кода для доступа к СОМ-объекту
После того
как Visyal J + + создаст классы-оболочки, можно написать код для доступа к методам
СОМ-объекта. В данном примере код добавляется в конструктор основной формы проекта.
Этот код создает экземпляр объекта СОМ и вызывает два его метода. Методы используют
явно заданные параметры, а их результаты отображаются в окне Output.
Чтобы
добавить код в конструктор формы:
В текстовом редакторе
появится исходный код для Forml.
statisticsobject.Stats stats = new statisticsobject.Stats();
System.out.println("0ur team has a winning percentage of " +stats.winl_ossPercentage(10, 4));
System.out.println("0ur
goaltender has a Goals Against Average of " +stats.goalsAgainstAverage(12,
15));
Здесь создается
экземпляр объекта Stats. Ссылка на statisticobject перед объектом Stats — это
имя пакета, в котором созданы классы-оболочки для Stats. После определения экземпляра
Stats вызываются его методы winLossPercentage и goalsAgainstAverage с явно заданными
параметрами, и результаты посылаются в окно Output при помощи вызова System.
out. println.
После вставки
вызовов методов СОМ-объекта соберите и запустите проект.
После запуска проекта Вы увидите в окне Output результаты вызовов методов объекта Stats. (Чтобы увидеть окно Output, из меню View перейдите в подменю Other Windows и затем выберите команду Output.)
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.