Предисловие
Наиболее распространенным языком программирования последнего десятилетия безусловно является С. Этому способствовали такие его особенности, как лаконичность, мощность, гибкость, мобильность. Вместе с тем, стремительное усложнение приложений, для реализации которых применяются традиционные процедурно-ориентированнные языки программирования и, в частности С, заставляют говорить об определенном кризисе в их использовании, связанном прежде всего с недостаточной надежностью и выразительной способностью.
Подобных недостатков во многом лишены языки объектно-ориентированнго программирования (ООП), в сонове которыхлежит идея моделирования объектов посредством иерархически связанных классов.
Отдельно взятый класс рассматривается как совакупность множества данных и операций над ними, причем доступ к элементам данных класса возможен только посредством операций этого класса. Установление четкой взаимозависимости между данными и операциями ведет к большой целостности данных и значительно повышает надежность программ по сравнению с традиционными языками программирования. Кроме того, идея программирования с помощью классов во многом использует тот же подход, который позволяет людям формировать модели объектов реального мира.
Впервые идеи ООП были реализованы в середине 60-х годов в языке программирования Симула-67. Последний, однако, не нашел в то время широкого распространения как в силу своей относительно меньшей производительности по сравнению с традиционными языками типа FORTRAN, ALGOL, PL/1 так и, возможно, неадекватности предлагаемых средств решаемым в то время задачи. Еще одним важным ограничением для распространеия Симулы-67 стали трудности, с которыми пришлось столкнуться большинству программистов при его изучении. Дело в том, что наряду с целым рядом безусловных достоинств, идеи ООП обладают и одним существенным недостатком - они далеко не просты для понимания и особенно для освоения с целью практического использования.
С++ - это объектно-ориентированыый язык, то есть язык, позволяющий программисту оперировать объектами некоторых типов, предварительно им определенным. Название языка "С++" отражает эволюционный характер изменения языка С (запись "++", в языке С, означает, что к какой-то переменной прибавляется единица). Он имеет еще более мощные и гибкие средства для написания эффективных программ, чем С, от которого он произошел. Человек, программмирующий на традиционных языках, может просто потерять голову от тех возможностей, которые предоставляет С++.
Но не менее важным является то, что такой распространенный и универсальный язык, как С, сохранен в качестве основы. С прост, эффективен, переносим. Чего только нет в языке С: строковых данных нет, матриц нет, средств параллельного программирования тоже нет. Нет даже ввода-вывода.
Типы, операции и операторы С очень близки к тому, с чем мы имеем дело в Ассемблере,- числа, адреса, арифметические и логические действия, циклы... Кроме того, многие особенности С недвусмысленно намекаю компилятору, как сократить код и время исполнения программы. Эти характерные черты языка С позволяют написать эффективно работающий и не слишком сложный компилятор. И хотя в машинных кодах на разных компьютерах элементарные операции обозначаютс по-разному, вряд ли разработчику компилятора придет в голову интерпретировать простейшие выражения каким-нибудь оригинальным способом. Именно поэтому язык С "идет везде и на всем", программы, написанные на нем, работают эффективно, и их можно переносить с одного компьютера на другой.
MSWindows и новый метод разработки программ.
Одним из наиболее важных механизмов взаимодействия программ является обмен данными. В MSWindows существует несколько способов взаимодействия приложений:
- почтовый ящик;
- динамический обмен данными;
- встраивание объектов.
Специальный почтовый ящик (clipboard) Windows позволяет пользователю переносить информацию из одного приложения в другое, не заботясь об ее форматах и представлении.
В отличие от профессиональных операциональных операционных систем, где механизм обмена данными между программами доступен только программисту, в Windows это делается очень просто и наглядно для пользователя.
Механизм обмена данных между приложениями - жизненно важное свойство многозадачной среды. И в настоящее время производители программного обеспечения пришли уже к выводу, что для переноса данных из одного приложения в другое почтового ящика уже недостаточно. Появился новый, более универсальный механизм - OLE (ObjectLinkingandEmbedding)
- Встроенная объектная связь, который позволяет переносить из одного приложения в другое разнородные данные. Например, с помощью этого механизма данные, подготовленные в системе TimeLineforWindows (Symantec), можно переносить в текстовый процессор JustWrite ( Symantec ), а затем, скажем, в генератор приложений ObjectVision (Borland). Правда, это уже нестандартное средство MicrosoftWindows, но тем не менее реализация OLE стала возможной именно в Windows.
Кроме механизма почтового ящика, предназначенного, в основном, для пользователя, программисту в Windows доступны специальные средства обмена данными между приложениями.
Программным путем можно установить прямую связь между задачами, например, принимая данные из последовательного порта, автоматически помещать их, скажем, в ячейки электронной таблицы Excel, средствами которой можно тут же отображать сложные зависимости в виде графиков или осуществлять их обработку в реальном режиме времени (этот механизм носит название динамического обмена данными - DynamicDataExchange, DDE ).
Основные термины
Клиентское приложение DDE - приложение, которому необходимо установить диалог с сервером и получить данные от сервера в процессе диалога.
DDE-диалог - взаимосвязь между клиентским и серверным приложениями.
Сервер-приложение - DDE приложение, которое передает данные клиенту в процессе диалога.
DDE-Транзакция -обмен сообщениями или данными между клиентом и сервером.
Item имя - строка, идентифицирующая некоторое множество данных, которое сервер в состоянии передать клиенту в процессе диалога.
Service имя - строка, генерируемая сервером и используемая клиентом для установления диалога.
Строковый указатель - двойное слово, генерируемое операционной системой, идентифицирующее строку, передающуюся в процессе динамического обмена данными.
Topic имя - строка, которая идентифицирует тип данных, необходимых клиентскому приложению при динамическом обмене данных.
Фильтр транзакции - флаг, который препятствует передаче нежелательных типов транзакций в функцию обратного вызова.
В MicrosoftWindows динамический обмен данных является формой связи, которая использует общие области памяти для обмена данными между приложениями. Приложение может использовать DDE в некоторый момент времени для передачи и получения новых данных от сервера.
Механизм DDE схож с механизмом почтового ящика, который является частью операционной системы WINDOWS. Существует лишь незначительная разница в том, что почтовый ящик, в большинстве случае, используется как буфер временного хранения информации. DDE может быть инициализирован пользователем и в большинстве случаев
продолжать работать без его вмешательства.
Библиотека DDEML обеспечивает пользователя набором средств, которые упрощают использование механизма DDE в WINDOWS приложениях. Вместо того, чтобы обрабатывать, получать и передавать DDE сообщения напрямую, приложения используют функции DDEML библиотеки. Библиотека DDEML также обеспечивает работу со строками и разделяемыми данными, генерируемыми DDE приложениями. Вместо того, чтобы использовать указатели на общие области памяти, DDE приложения создают и обмениваются строковыми указателями, которые идентифицируют строки и данные.
Уже существующие приложения, использующие протокол DDE, основанный на сообщениях полностью совместимы с теми, которые используют библиотеку DDEML. Вот почему приложение, использующее DDE-протокол могут установить диалог и выполнять транзакции с приложениями, использующими библиотеку DDEML.
Взаимосвязь между клиентом и сервером.
DDE возникает всегда между клиентским приложением и серверным. Клиентское приложение инициализирует обмен данными путем установления диалога с сервером и передачи транзакции. Транзакция необходима для данных и обслуживания. Сервер отвечает на транзакцию и обеспечивает клиента данными. Сервер может иметь сразу несколько клиентов в одно и тоже время, в свою очередь, клиент может получать данные сразу от нескольких серверов. Некоторое приложение одновременно может быть и клиентом и сервером. В добавок к вышесказанному, клиент и сервер могут оборвать диалог в любое удобное для них время.
DDE сервер использует три зарезервированных типа имен, расположенных иерархично: service, topicitem - уникально идентифицируют некоторое множество данных, которое сервер может передать клиенту в процессе диалога.
Service имя - это строка, которую генерирует сервер в те промежутки времени, в которые клиент может установить диалог с сервером.
Topic имя - это строка, которая идентифицирует логический контекст данных. Для сервера, который манипулирует файлами, topic имена это просто названия файлов; для других серверов – это специфические имена конкретного приложения. Клиент обязательно должен указывать topic имя вместе с service именем, когда он хочет установить диалог с сервером.
Item имя - это строка, которая идентифицирует некоторое множество данных, которое сервер может передать клиенту в процессе транзакции. Например, item имя может идентифицировать ЦЕЛОЕ ( int, integer ), СТРОКУ ( string, char * ), несколько параграфов текста, или BITMAP образ.
Все вышеуказанные имена позволяют клиенту установить диалог с сервером и получить от него данные.
Системный режим
Системный режим работы обеспечивает клиента всей необходимой информацией о сервере.