Камерон Хьюз - Параллельное и распределенное программирование на С++

Тут можно читать онлайн Камерон Хьюз - Параллельное и распределенное программирование на С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом «Вильямс», год 2004. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Параллельное и распределенное программирование на С++
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом «Вильямс»
  • Год:
    2004
  • Город:
    МоскваСанкт-ПетербургКиев
  • ISBN:
    ISBN 5-8459-0686-5 (рус.)ISBN 0-13-101376-9 (англ.)
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Камерон Хьюз - Параллельное и распределенное программирование на С++ краткое содержание

Параллельное и распределенное программирование на С++ - описание и краткое содержание, автор Камерон Хьюз, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
В книге представлен архитектурный подход к распределенному и параллельному программированию с использованием языка С++. Здесь описаны простые методы программирования параллельных виртуальных машин и основы разработки кластерных приложений. Эта книга не только научит писать программные компоненты, предназначенные для совместной работы в сетевой среде, но и послужит надежным «путеводителем» по стандартам для программистов, которые занимаются многозадачными и многопоточными приложениями. Многолетний опыт работы привел авторов книги к использованию агентно-ориентированной архитектуры, а для минимизации затрат на обеспечение связей между объектами системы они предлагают применить методологию «классной доски».
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.

Параллельное и распределенное программирование на С++ - читать онлайн бесплатно полную версию (весь текст целиком)

Параллельное и распределенное программирование на С++ - читать книгу онлайн бесплатно, автор Камерон Хьюз
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

// Листинг 9.3. Использование контейнерных шаблонов в // качестве аргументов шаблонных функций

template bool search(T Key, graph) {

//. . -

locate(Key) //. . .

}

// . . .

MPI_Comm_rank(MPI_COMM_WORLD, &TaskRank); // . . .

switch(TaskRank) {

case 1: {

graph bullion;

search search(«gold», bullion);

}

break; case 2: {

graph Coordinates; search((X,Y),Coordinates);

}

break;

//. . .

В листин г е 9.3 процесс, у которого TaskRank =1, выполняет поиск в графе (graph)сименем bullion,содержа щ е м string<^beKTbi,а процесс, у которого TaskRank = 2,выполняет поиск в графе Coordinates,содержа щ е м ко м плексные числа. Мы не должны из м енять функцию search(), чтобы приспособиться к други м дан н ы м или типам данных, да и MPI-програм м а в это м случае и м еет более простую структуру, поскольку м ы м оже м м ногократно использовать шаблонную функцию поиска (search)для прос м отра контейнера graph,содержа щ его данные любого типа. Использование шаблонов значительно упро щ ает 5РМГ>програ мм ирование. Че м более об щ ей м ы делае м MPI-задачу, те м более гибкой она становится. Кро м е того, если некоторый шаблон прошел этап отладки и тестирования, надежность всех построенных на его основе МР1-задач м ожно считать довольно высокой, поскольку все они выполняют одинаковый код.

Использование полиморфизмадля реализации MPMD-модели

Полиморфиз м— одна из основных характеристик объектно-ориентированного програ мм ирования. Если язык претенлует на поддержку объектно-ориентированно г о програ мм ирования, он должен по д держивать инкапсуляцию, нас л едование и по л и м орфиз м. По л и м орфиз м — это способность объекта прини м ать м ножество форм. По л иморфизм по д держивает понятие «один интерфейс — множество реализаций • Пользователь использует одно имя, или интерфейс, реализованный различными способами и различными объекта м и. Чтобы проиллюстрировать концепцию поли м орфизма, рассмотри м класс vehicle, его пото м ков и простую функцию travel (), которая использует класс vehicle. На рис. 9.2 показана простая иерархия нашего се м ейства класса vehicle.

Рис. 9.2. Иерархия семейства класса vehicle

Самолеты, вертолеты, автомобили и подводные лодки — все это потомки класса vehicle (транспортные средства). Объект класса vehicle может заводить мотор, перемещаться вперед, поворачивать вправо, поворачивать влево, останавливаться и пр. В листинге 9.4 демонстрируется, как функция travel () использует объект класca vehicle для совершения компьютеризованного путешестви я.

// Листинг 9.4.

//Функция travel(), которая в качестве параметра использует объект класса vehicle

void travel(vehicle *Transport) {

Transport->startEngine(); Transport->moveForward() ; Transport->turnLeft();

//.. .

Transport-> stop();

}

int main(int argc, char *argv[J) {

//.. . car *Car;

Transportation = new Vechicle(); travel(Car); //.. .

}

Функция travel() принимает указатель на объект класса vehicleи вызывает методы объекта класса vehicle.Обратите внимание на то, что функция main()в листинге 9.4 объявляет объект типа саг, а не vehicle,а также на то, что функции travel() вместо объекта типа vehicleпередается объект типа car.Это возможно благодаря тому, что в С++ указатель на класс может ссылаться на объект этого типа или на любой объект, который является потомком этого типа. Поскольку класс саг является производным от класса vehicle,то указатель на тип vehicleможет ссылаться на объект типа саг. Функция travel() написана без учета того, какими конкретно типами vehicle-объектов она будет манипулировать. Для функции travel() вполне достаточно, чтобы ее vehicle-объекты могли запускать мотор, двигаться вперед, поворачивать влево, вправо и т.д. Если vehicle-объект способен выполнять эти действия, то функция travel() сможет справиться со своей работой. Обратите внимание на то, что на рис. 9.2 методы класса vehicleобъявлены как виртуальные (virtual).Объявление методов виртуальными в базовом классе является необходимым условием динамического полиморфизма. В каждом из классов car, helicopter, submarineи airplaneбудут определены следующие функции.

startEngine(); moveForward(); turnLeft(); turnRight(); stop(); //.. .

При этом объявление каждой функции будет соответствовать типу транспортного средства. Несмотря на то что транспортное средство каждого типа способно двигаться вперед, метод, в котором обеспечивается движение автомобиля, отличается от метода перемещения подводной лодки. Управление поворотом вправо у самолета отличается от управления таким же поворотом у автомобиля. Следовательно, транспорт-ное средство каждого типа должно реализовать необходимые операции для получения законченного описания «своего» класса. Поскольку эти операции объявляются как виртуальные в базовом классе, они и являются кандидатами для реализации полиморфизма. Если vehicle-указатель, переданный функции travel(), в действительности ссылается на объект типа car,то методами, вызываемыми в этой функции (startEngine (), moveForward()и пр.), реально окажутся те, которые определены в классе car.Если vehicle-указатель, переданный функции travel (),вдействительности ссылается на объект класса airplane,то методами, вызываемыми в этой функции, реально окажутся те, которые определены в классе airplane.Это и есть тот случай, когда много форм реализуется при одном интерфейсе. Несмотря на то что функция travel() вызывает только один набор методов, поведе н ие этих м етодов может радикаль н о отличаться в зависи м ости от то г о, указатель на объект како г о vehicle-класса был назначен vehicle-указателю. По л и м орфиз м фу н кции travel ()состоит в то м, что при каждо м вызове о н а м ожет выпо лн ять соверше нн о раз н ые действия. И в самом де л е, поско л ьку фу н кция travel() испо л ьзует указате л ь на к л асс vehicle,в булу щ ем ее можно испо л ьзовать д л я типов, производных от к л асса vehicle,которые бы л и неизвестны и л и не су щ ествовали во время разработки функции travel().До тех пор пока буду щ ие vehicleл ассы будут нас л едовать к л асс vehicleи опреде л ять необходимые методы, ими можно будет управ л ять с помо щ ью фу н кции travel(). Этот тип по л иморфизма называется динамическим (runtime polymorphism),поско л ьку фу н кция travel () н е знает точно, какие и м енно функции startEngine (), moveForward() и л и turnLeft() она будет вызывать, до тех пор, пока про г ра мм а не начнет выпо л няться.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Камерон Хьюз читать все книги автора по порядку

Камерон Хьюз - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Параллельное и распределенное программирование на С++ отзывы


Отзывы читателей о книге Параллельное и распределенное программирование на С++, автор: Камерон Хьюз. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x