Смекни!
smekni.com

Протоколы и стандарты объектно-ориентированного программирования (стр. 2 из 6)

чем текст функций, которые считаем своей интеллектуальной соб-

ственностью, начинается самое интересное. Теперь мы можем опи-

сать сколько угодно новых типов фигур - многоугольников, звездо-

чек, эллипсов - производных от класса "геометрическая фигура" и

объяснить, как их рисовать, увеличивать и поворачивать. Как дви-

гать - объяснять не надо. Это уже есть в базовом классе. Функции

нашей библиотеки могут работать собъектами вновь созданных типов,

для них это варианты геометричесой фигуры. Следует отметить, что

в производных классах могут (и, как правило, должны) появлятся

данные и функции, которых нет в базовом классе. Однако ни одна из

функций, обрабатывающих "геометрические фигуры", никогда не уз-

нает о специфических свойствах многоугольника или эллипса, кроме

того, что они по-своему рисуются, увеличиваются и поворачиваются.

Производный класс сам может быть базовым для других классов, а

поздние версии С++ позволяют сделать один класс производным от

нескольких других.

При написании программы часто допускаются досадные оплошнос-

ти, обнаруживающиеся только на стадии выполнения и, увы, слишком

поздно. Например, если переменная по смыслу - знаменатель дроби,

хотелось бы получить сообщение об ошиюке тогда, когда ей присваи-

вается ноль, а не тогда, когда на этот ноль что-нибудь делится.

Или, скажем, функция рисования точки. Невозможно удержаться от

соблазна вызвать ее хотя бы раз без проверки выхода за границы

экрана. В то же время , если мы пишем программу рисования линии,

обязательно нужна функция, которая тупо ставит точку - и как мож-

но быстрее. Существует много ситуаций, когда функции и данные

следует разрешить использовать только привилегированным функциям,

над которыми ва "хорошо подумали". В С++ этого можно добиться,

сделав "опасные" данные и функции защищенными членами какого-ни-

будь класса. К ним имеют доступ только функции-члены этого же

класса, а так же друзья класса. Напротив, если данные или фун-

кции-члены объявлены public, они являются общедоступными.

С++ предоставляет в распоряжение программиста сложные типы

данных. Однако ни аппарат классов, ни перегрузка операций не

влияют на эффективность. То, что класс - это класс, известно

только компилятору. Если функции-члены классов объявлены inline,

на их вызов не требуется время. Фактически это не функции, а под-

становки. Лишь виртуальные функции оставляют относительно не-

большой след в оперативной памяти.

Из всего выше сказанного вытекает логичный вывод: С++ наибо-

лее удобный, универсальный и необходимый язык. Но все же возни-

кает вопрос, что же было написано на этом языке, используя прин-

ципы ООП, что можно было бы "потрогать" любому программисту или

пользователю. Ответ очевиден - это Microsoft Windows.


MS Windows и новый метод разработки программ.

Одним из наиболее важных механизмов взаимодействия программ

является обмен данными. В MS Windows существует несколько способов

взаимодействия приложений:

- почтовый ящик;

- динамический обмен данными;

- встраивание объектов.

Специальный почтовый ящик (clipboard) Windows позволяет

пользователю переносить информацию из одного приложения в другое,

не заботясь об ее форматах и представлении.

В отличие от профессиональных операциональных операционных

систем, где механизм обмена данными между программами доступен

только программисту, в Windows это делается очень просто и наг-

лядно для пользователя.

Механизм обмена данных между приложениями - жизненно важное

свойство многозадачной среды. И в настоящее время производители

программного обеспечения пришли уже к выводу, что для переноса

данных из одного приложения в другое почтового ящика уже недоста-

точно. Появился новый, более универсальный механизм - OLE (

Object Linking and Embedding )

- Встроенная объектная связь, который позволяет пе-

реносить из одного приложения в другое разнородные данные. Напри-

мер, с помощью этого механизма данные, подготовленные в системе

сетевого планирования Time Line for Windows ( Symantec ), можно

переносить в текстовый процессор Just Write ( Symantec ), а за-

тем, скажем, в генератор приложений Object Vision (Borland).

Правда, это уже нестандартное средство Microsoft Windows, но тем

не менее реализация OLE стала возможной именно в Windows.

Кроме механизма почтового ящика, предназначенного, в основ-

ном, для пользователя, программисту в Windows доступны спе-

циальные средства обмена данными между приложениями.

Программным путем можно установить прямую связь между зада-

чами, например, принимая данные из последовательного порта, авто-

матически помещать их, скажем, в ячейки электронной таблицы

Excel, средствами которой можно тут же отображать сложные зависи-

мости в виде графиков или осуществлять их обработку в реальном

режиме времени (этот механизм носит название динамического обме-

на данными - Dynamic Data Exchange, DDE ).

Основные термины

Клиентское приложение DDE - приложение, которому необходи-

мо установить диалог с сервером и получить данные от сервера в

процессе диалога.

DDE-диалог - взаимосвязь между клиентским и серверным при-

ложениями.

Сервер-приложение - DDE приложение, которое передает дан-

ные клиенту в процессе диалога.

DDE-Транзакция -обмен сообщениями или данными между клиен-

том и сервером.

Item имя - строка, идентифицирующая некоторое множество

данных, которое сервер в состоянии передать клиенту в процессе

диалога.

Service имя - строка, генерируемая сервером и используе-

мая клиентом для установления диалога.

Строковый указатель - двойное слово, генерируемое опера-

ционной системой, идентифицирующее строку, передающуюся в процес-

се динамического обмена данными.

Topic имя - строка, которая идентифицирует тип данных,

необходимых клиентскому приложению при динамическом обмене данных.

Фильтр транзакции - флаг, который препятствует передаче

нежелательных типов транзакций в функцию обратного вызова.

В Microsoft Windows динамический обмен данных является фор-

мой связи, которая использует общие области памяти для обмена

данными между приложениями. Приложение может использовать DDE в

некоторый момент времени для передачи и получения новых данных от

сервера.

Механизм DDE схож с механизмом почтового ящика, который яв-

ляется частью операционной системы WINDOWS. Существует лишь нез-

начительная разница в том, что почтовый ящик, в большинстве слу-

чае, используется как буфер временного хранения информации. DDE

может быть инициализирован пользователем и в большинстве случаев

продолжать работать без его вмешательства.

Библиотека DDEML обеспечивает пользователя набором средств,

которые упрощают использование механизма DDE в WINDOWS приложе-

ниях. Вместо того, чтобы обрабатывать, получать и передавать DDE

сообщения напрямую, приложения используют функции DDEML библиоте-

ки. Библиотека DDEML также обеспечивает работу со строками и раз-

деляемыми данными, генерируемыми DDE приложениями. Вместо того,

чтобы использовать указатели на общие области памяти, DDE прило-

жения создают и обмениваются строковыми указателями, которые

идентифицируют строки и данные.

Уже существующие приложения, использующие протокол DDE, ос-

нованный на сообщениях полностью совместимы с теми, которые ис-

пользуют библиотеку DDEML. Вот почему приложение, использующее

DDE-протокол могут установить диалог и выполнять транзакции с

приложениями, использующими библиотеку DDEML.

Взаимосвязь между клиентом и сервером.

DDE возникает всегда между клиентским приложением и сервер-

ным. Клиентское приложение инициализирует обмен данными путем ус-

тановления диалога с сервером и передачи транзакции. Транзакция

необходима для данных и обслуживания. Сервер отвечает на транзак-

цию и обеспечивает клиента данными. Сервер может иметь сразу нес-

колько клиентов в одно и тоже время, в свою очередь, клиент мо-

жет получать данные сразу от нескольких серверов. Некоторое при-

ложение одновременно может быть и клиентом и сервером. В добавок

к вышесказанному, клиент и сервер могут оборвать диалог в любое

удобное для них время.

DDE сервер использует три зарезервированных типа имен, рас-

положенных иерархично: service, topic item - уникально идентифи-

цируют некоторое множество данных, которое сервер может передать

клиенту в процессе диалога.

Service имя - это строка, которую генерирует сервер в те

промежутки времени, в которые клиент может установить диалог с

сервером.

Topic имя - это строка, которая идентифицирует логичес-

кий контекст данных. Для сервера, который манипулирует файлами,

topic имена это просто названия файлов; для других серверов - это

специфические имена конкретного приложения. Клиент обязательно

должен указывать topic имя вместе с service именем, когда он хо-

чет установить диалог с сервером.

Item имя - это строка, которая идентифицирует некото-

рое множество данных, которое сервер может передать клиенту в

процессе транзакции. Например, item имя может идентифицировать

ЦЕЛОЕ ( int, integer ), СТРОКУ ( string, char * ), несколько па-

раграфов текста, или BITMAP образ.

Все вышеуказанные имена позволяют клиенту установить диа-

лог с сервером и получить от него данные.

Системный режим

Системный режим работы обеспечивает клиента всей необходи-

мой информцией о сервере.

Для того, чтобы определить, какие серверы доступны в дан-

ный момент времени, а также какой информацией они могут обеспе-

чить клиента, последний, находясь в начальном режиме работы, дол-

жен установить имя устройства, равное NULL. Такой шаблон диалога