Лекция 1 Введение в современные технологии программирования

Вид материалаЛекция

Содержание


1.1.Требования к современным технологиям программирования
1.2. Введение в СОМ, ActiveX и OLE
ActiveX и OLE
Основы технологии ActiveX
Назначение СОМ
Краткая история развития СОМ
Цели и задачи технологии СОМ
Дальнейшее развитие СОМ
1.3. Базовые понятие СОМ-технологии
Функционирование СОМ
СОМ приложение предоставляет для использования свои сервисы, применяя для этого объекты СОМ
Interface Definition Language
СОМ с точки зрения ООП несомненно является объектом. Однако, как ключевой элемент технологии СОМ
СОМ, то ин­терфейсы являются центральным звеном идеологии СОМ
СОМ) и заблудившийся иностранец (клиент). Предусмотрительный иностранец захватил с собой словарь (библиотека ти­пов или интерфей
Интерфейс — это не класс.
Интерфейс строго типизирован.
Интерфейс является неизменным контрактом.
Интерфейс lUnknown
Release интерфейса IUnknown
...
Полное содержание
Подобный материал:
  1   2   3   4

ЛЕКЦИЯ 1


Введение в современные технологии программирования

Под технологией программирования понимается совокупность обобщенных и систематизированных знаний, или наука, об оптимальных способах (приемах и процедурах) проведения процесса программирования, обеспечивающего в заданных условиях получение программной продукции с заданными свойствами.

Технологии программирования определяет некоторую профессиональную культуру работы специалистов (не только программистов), обеспечивающую заданный уровень производительности труда и качества получаемой в результате программной продукции. Она охватывает содержание процесса программирования в его значении от появления потребности в создании некоторой программы до ее изготовления, передачи пользователю, модификации в процессе эксплуатации и прекращения использования вследствие морального старения.

Технологии программирования – это некоторое общее базовое понятие, компоненты которого могут использоваться по-разному, в разных сочетаниях, в зависимости от условий их применения. Например, в технологическом комплексе программиста может быть несколько редакторов – встроенный, диалоговый, графический и т. д. Каждый редактор может иметь несколько вариантов реализации, учитывающих особенности операционной системы, в которой он работает, или квалификацию его разработчика. Для каждого из этих редакторов существует своя технология работы, свои регламентирующие инструкции. Поэтому на практике наряду с понятием технологии программирования широко используется понятие технологической линии (программирования, программиста или производства программ).

Технологическая линия имеет единую регламентированную технологию программирования, все компоненты которой на заданном рабочем интервале согласованы и настроены на конкретные условия конкретного коллектива специалистов. В технологической линии четко указано оборудование, на котором надо работать, и технология его использования – «делай так, а не иначе».

Разработка программного обеспечения уже никогда не будет про­изводиться так, как это делалось раньше. Такова нынешняя реальность: члены одной команды больше не работают вместе. Зачастую они разделены террито­риально, но и находясь в одном офисе, в силу загруженности почти не контактируют между собой или же делают это крайне-неэффективно, тогда как потребность в обмене информацией и согласовании действий очень велика. Нередко даже основным участникам проекта — его руководителям, архитекторам системы, разработчикам программного обеспечения и тестировщикам — бы­вает довольно сложно обменяться необходимыми сведениями, не говоря уже о сотрудниках отдела внедрения и эксплуатации. Проводятся бесконечные совещания, телефонные переговоры, переписка по электронной почте, а работа, тем временем, тормозится, проект не укладывается в бюджет или вообще не со­ответствует требованиям.

1.1.Требования к современным технологиям программирования

Анализ известных и широко распространенных технологий и методов программирования позволяет сформулировать следующие основные требования к ним.
  1. Технология программирования должна обеспечить отторжимость программного изделия от его разработчика, т.е. человеческий фактор в программировании должен быть сведен к минимуму. Это необходимо как для разработки программного изделия, так и для грамотного сопровождения, модификации и воспроизводства его на других ЭВМ в других условиях эксплуатации.
  2. Технология программирования и средства ее поддержки (автоматизации) должны обеспечивать целенаправленную работу, прежде всего, коллектива программистов, а не отдельных личностей. Она должна побуждать коллектив работать только правильно и должна автоматически блокировать любые, не санкционированные технологией действия. Сетевое планирование, система формализованных поручений и эффективный контроль исполнения должны быть составной частью любой современной технологии.
  3. Технология программирования должна быть безбумажной. Это значит, что весь процесс изготовления программного изделия и управления деятельностью коллектива программистов должен быть максимально дебюрократизирован и выполняться за пультом экрана с минимальным расходом бумаги. Документация на программное изделие (техническое описание, инструкции пользователю, инструкции по эксплуатации и т.п.) должны заноситься и храниться в основном на магнитных носителях. Работа пользователя должна обеспечиваться развитой информационно-справочной системой.
  4. Средства автоматизации технологии должны охватывать все этапы работы коллектива программистов. Они должны учитывать существующий опыт, отраженный в отечественных стандартах, а также должны обеспечивать возможность гибкой и простой их перенастройки на основе постоянно накапливаемого опыта разработчика.
  5. Технология программирования не должна быть связана с языком программирования, так как по современным представлениям он не является определяющим звеном в технологии программирования.
  6. Технология программирования должна быть простой в освоении, с автоматически включаемыми средствами подсказки и обучения универсального применения. Эти средства должны быть иерархическими и оперативно привязанными к изготовляемому программному продукту. Должна быть предусмотрена система автоматической генерации средств подсказки и обучения применительно к изготовляемому программному изделию.
  7. Технология программирования должна иметь средства автоматической фиксации всех действий, выполняемых в процессе коллективного изготовления программного изделия – должны вестись и храниться в системе журналы (протоколы, дневники разработки). Эти средства должны позволять восстанавливать любые состояния процесса на любом этапе изготовления программного изделия, а также использоваться в процессе его эксплуатации.

1.2. Введение в СОМ, ActiveX и OLE

Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться. Языки (C++, Visual Basic, Java), библиотеки (MFC, ATL, STL), архитектуры (COM, CORBA), кото­рые стали вехами в развитии программирования за последние годы, постепенно уходят в тень лучших или по крайней мере более молодых программных техноло­гий. Вне зависимости от того, нравится это программистам или нет, этот процесс неизбежен. Модель компонентных объектов (Component Object Model, COM) лежит в основе технологии Microsoft ActiveX. Она стала неотъемлемой частью Microsoft Windows, и поэтому изучение ее – обязательная часть дисциплины «Технология программирования». Платформа .NET компании Microsoft — это следующая волна корен­ных изменений, которая идет к нам из Редмонда.

Хорошую программу написать трудно. По мере того, как компьютеры все глубже внедряются в нашу жизнь, и мы начинаем зависеть от них во всем - от управления автомобилем до сочинения писем и выпечки тортов, - эффективность и надежность программного обеспечения делается все важнее. Хорошие программы становятся основой нашей цивилизации.

Можно сказать, что история программирования - это история попыток написать совершенный код. Разработка как прикладного, так и системного программного обеспечения страдала от бесконечных проволочек, а сами программы отличались чрезвычайной сложностью и непредсказуемым количеством “жучков”. И все же без программ не обойтись, и их надо писать - это ясно. Как написать хорошую программу - вот в чем вопрос. Для этого нужно обладать способностью, чтобы соединять общие принципы программного проекта с желанием (и даже горячим стремлением) вникнуть в миллиарды мелочей. Это требует не только интеллектуальных колоссальных усилий, но и соответствующего инструментария, который, увы, еще далек от совершенства.

Технология программирования ActiveX и OLE на основе СОМ технологии фирмы Microsoft - еще один шаг к более совершенным, т. е. более надежным и эффективным программам. Но не только более совершенные программы должны делать то, что раньше было невозможно, но и решать новые проблемы. В основе ActiveX и OLE лежит очень простая идея, но, как оказалась, она позволяет существенно повысить эффективность программирования.

Основы технологии ActiveX

Терминология меняется столь же стремительно, как и технология, и даже внутри Microsoft нет единства относительно того, как использовать термины ActiveX и OLE. Считайте, что ActiveX — это нечто, возникшее при столкновении «старого» OLE и Интернета. ActiveX включает в себя не только те возможности Windows, основанные на СОМ, которые мы рассмотрим при изучении дисциплины, но и семейство Microsoft Internet Information Server и программный интерфейс WinInet.

Да, OLE по-прежнему жива и теперь вновь расшифровывается Object Linking and Embedding (связывание и внедрение объектов), как и во время OLE 1.0. Сейчас это просто еще одно подмножество технологии ActiveX, содержащее различные операции, например операцию drag-and-drop (перетащить и отпустить). К сожалению (или к счастью, если у вас есть ранее написанный код), исходный MFC-код и Windows API не следуют за последними изменениями терминологии, Поэтому в названиях функций и классов вы увидите множество упоминаний OLE и Оlе, хотя некоторые из этих функций выходят за рамки связывания и внедрения. При использовании кода, сгенерированного MFC Application Wizard, вы можете заметить упоминания о «сервере» (server). Теперь Microsoft резервирует этот термин толь­ко для серверов баз данных и Интернет-серверов. В отношении OLE-серверов применяется новый термин — компонент (component).

Компьютерные секции книжных магазинов забиты книгами по OLE, COM и ActiveX. При изучении дисциплины мы не достигнем той глубины, которой отличаются эти труды, но вы наверняка получите хорошее представление о теории СОМ. Мы уделим боль­шее, внимание связи СОМ с классами библиотеки MFC. Это послужит хорошей подготовкой к практическому использованию СОМ..

COM приносит столько же проблем, сколько решает. Большую часть этой технологии в настоящее время заменяет компонентная модель .NET со своими сборками (assembly) и CLR-средой (common language runtime). Тем не менее СОМ пока в силе, и поэтому первая часть нашего курса будет посвящена изучению СОМ.

Назначение СОМ

СОМ (Component Object Model - модель многокомпонентных объектов) одна из базовых технологий Windows. СОМ — это программная архитектура динамического компоновки ПО. В СОМ предпринята попытка решить проблемы поддержки версий (этим «грешат» DLL) и сложности механизма удаленного вызова процедур (remote procedure call, RPC).Более того, все новые технологии Windows (Shell, Scripting, поддержка HTML и т.п.) реализуют свои программные интерфейсы (Application Program Interface, API) именно в виде COM-интерфейсов. Таким образом, в настоящее время профессиональное программирование требует понимание модели COM и умения с ней работать. СОМ создавалась с прицелом на решение двух проблем, с которыми повсеместно сталкиваются программисты, работающие в операционной среде Windows.
  1. Эта модель предоставляет в распоряжение программиста спецификацию, на основе которой он может создавать объекты, способные функционировать в различной языковой и операционной средах.
  2. Модель определяет способы взаимодействия клиентских приложений, работающих на одной машине, с приложением-сервером, функционирующим на другой машине.

Краткая история развития СОМ

Технология СОМ начала развиваться как технология OLE - Object Linking and Embedding (связывание и внедрение объектов). В первую очередь, OLE появилась как одно из направлений развития технологии обмена данными (Dynamic Data Exchange - DDE). Эти технологии позволяли клиентскому приложению получать и сохранять данные от приложения- сервера, а также получать информацию о самом приложении-сервере. Это позволяло при необходимости, по запросу пользователя, запустить его приложение - как правило, после двойного щелчка на пиктограмме, представляющей соответствующие данные.

Первое воплощение OLE - OLE (Object Linking and Embeding 1 - Связывание и внедрение объектов) - представляло собой механизм создания и работы с составными документами (compound documents). С точки зрения пользователя, составной документ выглядит единым набором информации, но фактически содержит элементы, созданные двумя или несколькими разными приложениями. С помощью OLE 1 пользователь мог, например, объединить электронную таблицу, созданную Microsoft Excel, с текстовым документом “производства” Microsoft Word. Идея состояла в том, чтобы документо-ориентированная (document - centric) модель работы с компьютером позволила бы пользователю больше думать об информации и меньше - о приложениях, ее обрабатывающих. Как следует из определения “ связывание и внедрение”, составные документы можно создать, либо связав два разных документа, либо полностью внедрив один документ в другой.

OLE 1, как и большинство первых версий программных продуктов, была несовершенна. Архитекторам следующей версии предстояло улучшить первоначальный проект. Вскоре они поняли, что составные документы - лишь частный случай более общей проблемы: как разные программные компоненты должны предоставлять друг другу сервисы? Для решения этой проблемы архитекторы OLE создали группу технологий, область применения которых гораздо шире составных документов. Основу OLE 2 составляет важнейшая из этих технологий - Модель многокомпонентных объектов (Component Object Model - COM). Новая версия OLE не только обеспечивает поддержку составных документов лучше, чем первая, но и, несомненно, идет куда дальше простого объединения документов, созданных в разных приложениях. OLE 2 позволяет по-новому взглянуть на взаимодействие любых типов программ.

Новые возможности многим обязаны СОМ, которая предоставила общую парадигму взаимодействия программ любых типов: библиотек, приложений, системного программного обеспечения и тому подобного. Вот почему подход, предложенный СОМ, можно использовать при реализации практически любой программной технологии, и его применение дает немало существенных преимуществ.

Благодаря этим преимуществам, СОМ скоро стала частью технологий, не имеющих никакого отношения к составным документам. Однако в Microsoft хотели сохранить общее имя для всей группы технологий, в основе которых лежит СОМ. Компания решила сократить название Object Linking and Embeding до OLE - эта комбинация более не рассматривалась как аббревиатура - и опустить номер версии.

По мере совершенствования технологии OLE фирма Microsoft включала в ее состав все новые функциональные возможности, такие как Automation - автоматизация, OLE-элементы управления, за которыми закрепилась аббревиатура OCX.

При новом порядке термин OLE применялся ко всему, созданному на основе парадигмы, представленной СОМ (хотя СОМ использовалась также в продуктах, в названии которых нет слова OLE). OLE более не обозначало только составные документы, но стало маркой любой технологии на основе СОМ. Вообще объединение под одним именем всего программного обеспечения, написанного с применением СОМ, имеет не больше смысла, чем, скажем, объединение всех программ, написанных на С++. СОМ, как и язык программирования типа С++, является универсальным инструментом, который можно использовать для создания программ любых типов. Тем не менее, как по историческим причинам, так и для того, чтобы обозначить явление новой и перспективной технологии, термин OLE использовался в названиях многих (но отнюдь не всех) технологий на основе СОМ. (Название OLE применялось к любой технологии, использующей СОМ).

В начале 1996 года Microsoft ввела в оборот новый термин - ActiveX. Сначала он относился к технологиям, связанным с Интернетом, и приложениям, выросшим из него, вроде WWW (World Wide Web). Поскольку большинство разработок Microsoft в данной области было основано на СОМ, то и ActiveX была непосредственно связана с OLE. Однако очень скоро новый термин стал захватывать территории, традиционно принадлежавшие OLE, и вот теперь все вернулось на круги своя: OLE, как и ранее, обозначает только технологию создания составных документов связыванием и внедрением, а разнообразные технологии на основе СОМ, ранее объединенные под именем OLE, собраны под именем ActiveX. А некоторые технологии, название которых содержало слово “OLE” даже перекрестили: теперь это технологии ActiveX. Новые технологии на основе СОМ, которым раньше полагался ярлык “OLE” - теперь часто получают пометку “ActiveX”.

Таким образом, если придерживаться точности в терминологии, то СОМ - это техническая реализация OLE, хотя четкой границы между этими терминами не существует и большинство пользователей полагает, что это одно и то же. Термин OLE, в принципе, относится к функциональным возможностям высокого уровня, как надстроенным над СОМ, в число которых входят "погружение", "запуск на месте", хранение структур и т.п.