Камерон Хьюз - Параллельное и распределенное программирование на С++
- Название:Параллельное и распределенное программирование на С++
- Автор:
- Жанр:
- Издательство:Издательский дом «Вильямс»
- Год:2004
- Город:МоскваСанкт-ПетербургКиев
- ISBN:ISBN 5-8459-0686-5 (рус.)ISBN 0-13-101376-9 (англ.)
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Камерон Хьюз - Параллельное и распределенное программирование на С++ краткое содержание
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.
Параллельное и распределенное программирование на С++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
4 #include
5 #include 6
7
8 int main(int argc, char *argv[])
9 {
10 CORBA::ORB_var Orb = CORBA::ORB_init(argc, argv, «mico-local-orb»);
11 CORBA::BOA_var Boa = Orb->BOA_init(argc,argv,«mico-local-boa»);
12 ifstream In(«adding_machine.objid»);
13 string Ref;
14 if('In.eof()){
15 In » Ref;
16 }
17 In.close();
18 CORBA::Object_var Obj = Orb->string_to_object(Ref.data());
19 adding_machine_var Machine =adding_machine::_narrow(Obj);
20 Machine->add(700);
21 Machine->subtract(250);
22 cout << «Результат равен " « Machine->result()« endl;
23 return(0);
24 }
25
26
При выполнении строки 10 ORB-брокер инициализируетс я. Строка 15 обеспечивает считывание из файла IOR-ссылки на объект adding_machine.Одно из прекрасных свойств IOR-ссылки состоит в том, что ее можно хранить как простую строку и передавать другим программам. Передачу IOR-ссылки проще всего реализовать с помощью аргументов командной строки, переменных среды или файлов. IOR-ссылку можно отправить по электронной почте или с помощью протокола передачи файлов (File Transfer Protocol — FTP). IOR-ссылки совместно используют файловые системы, и их можно загружать с Web-страниц. Если некоторая программа имеет IOR-ссылку на удаленный объект, то для доступа к нему можно использовать ORB-брокер. Другие методы связи между объектами с помощью IOR-ссылок будут рассмотрены ниже в этой главе. Но для начала вполне достаточно использования файловых систем. Итак, в программе 8.1 IOR-ссылка была получена путем преобразования объектной ссылки в «строковую» форму (с использованием ORB-брокера удаленного калькулятора) и записана в файл. При выполнении строки 18 локальный объект Orb преобразует «строковую» IOR-ссылку обратно в объектную. В строке 19 эта объектнал ссылка используется для реализации объекта adding_machine. Обратите внимание на то, что при вызове методов этого объекта adding_machine выполняется соответствующий код удаленного калькулятора (см. строки 20, 21 и 22).
Machine->add(700) ;
Machine->subtract(250) ;
cout « «Результат равен " « Machine->result() « endl;
И хотя вызовы этих методов сделаны в нашей локальной области види м ости, они относятся к выполняемому колу в другом адресном пространстве (в данном случае — даже к другому компьютеру). Для разработчика местоположение объекта Machineкак будто перестает иметь значение. После создания (в строке 19) этот объект используется как любой другой объект С++. И хотя существуют весьма значительные различия между вызовами локальных и удаленных объектов [15], объектно-ориентированное представление, тем не менее, поддерживается, и с точки зрения объектно-ориентированного программирования удаленные объекты ведут себя как локальные. Код, представленный в программе 8.1, является кодом клиентской части приложения (или кодом «потребителя»), поскольку в нем используются возможности объекта adding_machine. Поэтому теперь (для получения завершенного приложения калькулятора) нам нужен код «ответной части», который реализует объект adding_machine. Код этого второго компонента представлен в программе 8.2.
// Программа 8.2
1 #include
2 #include
3 #include «adding_machine_impl.h» 4
5 6 7
8 int main(int argc, char *argv[])
9 {
10 CORBA::ORB_var Orb = CORBA: :ORB_init(argc,argv,«mico-local-orb»);
11 CORBA::BOA_var Boa = Orb->BOA_init(argc,argv,«mico-local-boa») ;
12 adding_machine_impl *AddingMachine =new adding_machine_impl;
13 CORBA::String_var Ref = Orb->object_to_string(AddingMachine);
14 ofstream Out(«adding_machine.objid»);
15 Out « Ref « endl;
16 Out.close() ;
17 Boa->impl_is_ready (CORBA: : ImplementationDef : :_nil () ) ;
18 Orb->run();
19 CORBA: :release(AddingMachine) ;
20 return(0);
21 } 22 23
Обратите внимание на то, что программа-«изготовитель» также должна инициализировать объект Orb(в строке 10). Это — одно из важных требований, предъявляемых к CORBA-ориентированным программам, поскольку каждая программа реализует взаимодействие с удаленными объектами с помощью ORB-брoкepa. Именно поэтому инициализация ORB-объекта— первое действие, которое должна выполнить CORBA-программа. В строке 12 объявляется реальный объект adding_machine . Это именно тот объект, с которым в действительности связывается программа 8.1. В строке 13 объектная ссылка на реальный объект adding_machine преобразуется в «строковую» форму, а затем записывается в обычный текстовый файл, чтобы ее можно было без труда прочитать. После того как IOR-ссылка записана в файл, объект Orb ожидает запроса. При каждом вызове одного из его методов этот объект выполняет соответствующее арифметическое действие (сложение или вычитание). Значение результата передается посредством вызова метода result() объекта adding_machine. Программы 8.1 и 8.2 демонстрируют базовую структуру, которую должны иметь CORBA-программы. Код, создающий объект adding_machine, начинается с объявления его CORBA-класса. Каждый CORBA-объект начинается как IDL-проект (Interface Definition Language — язык описания интерфейсов).
Язык описания интерфейсов (IDL):более «пристальный» взгляд на CORBA-объекты
Язык описания интерфейсов (IDL) — стандартный язык объектно-ориентированного проектирования, который используется для разработки классов, предназначенных для распределенного программирования. Он применяется для отображения интерфейса класса и отношений между классами, а также для определения прототипов функций-членов, типов параметров и типов значений, возвращаемых функциями. Одно из основных назначений языка IDL — отделить интерфейс класса от его реализации. Но дл я определени я самих функций-членов и членов данных IDL не используетс я. Язык IDL определ я ет только интерфейс функции. Основные ключевые слова IDL перечислены в табл. 8.1.
Таблица8.1. | Ключевые слова IDL | ||
abstract | enum | native | struct |
any | factory | Object | supports |
attribute | FALSE | octet | typedef |
boolean | fixed | oneway | unsigned |
case | float | out | union |
char | in | raises | ValueBase |
const | inout | readonly | valuetype |
cell | interface | sequence | void |
double | long | short | wchar |
exception | module | string |
Ключевые слова, перечисленные в табл. 8.1, представл я ют собой зарезервированные слова, используемые в CORBA-программах. Помимо определени я интерфейса функций дл я класса, я зык IDL используетс я дл я определени я отношений между к л ассами. IDL под д ерживает:
Читать дальшеИнтервал:
Закладка: