Место объектно-ориентированного программирования в современном программировании

 

Содержание


Введение

ООП и его место в современном программировании

COM - объекты

ActiveX - объекты

Принципы и применение описаний информационных систем (UML и аналоги)

Способы применения UML

Практическая часть

Заключение

Список литературы

Приложения

Введение


Использовавшиеся ранее объектные технологии имели ряд проблем:

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

С++ - не единственный язык программирования. Кроме того, существуют уже не языки, а целые среды программирования: Delphi, Visual Basic и т.п. Но объекты, написанные на разных языках, в разных средах, не могут обычно взаимодействовать между собой.

Если в приложении, созданном из различных объектов, один объект следует заменить, то придется перелинковывать или перекомпилировать все приложение.

СОМ решает все указанные проблемы:

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

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

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

Основная цель технологии COM - обеспечение возможности экспорта объектов. Идея экспорта состоит в том, что один модуль создает объект, а другой его использует, обращаясь к его методам и сервисам. Естественно рационально экспортировать сложные объекты, реализующие большие и трудоемкие задачи, неизвестные алгоритмы и тому подобное.

СОМ определяет множество стандартных интерфейсов, которые реализованы в соответствующих библиотеках, поставляемых как в составе ОС, так и в составе отдельных программных продуктов. Цель новых технологий, таких как ActiveX, сделать как можно больше надстроек над СОМ, т.е. определить множество стандартных интерфейсов, работающих через объекты и интерфейсы СОМ.

ООП и его место в современном программировании


Объектно-ориентированное, или объектное, программирование - парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

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

С появлением Windows без объектов в программировании просто не обойтись.

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

ООП обладает рядом преимуществ при создании больших программ. В частности, к ним можно отнести:

.использование более естественных с точки зрения обычной повседневной практики понятий, простота введения новых понятий;

2.упрощение разработки многократно используемых компонент приложений;

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

.возможность создания библиотеки классов; в частности, библиотека визуальных компонент С++ Builder и является примером такой библиотеки;

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

.возможность написания подпрограмм с различными наборами формальных параметров, но имеющих одно и то же имя;

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

.возможность разделения доступа к различным объектам программы и т.д.

В конце 60-х годов возникла идея объединить понятия тип данных, процедура, функция, запись и то, что получилось, назвать объектом. Рассмотрение данных в неразрывной связи с методами их обработки позволило вывести формулу объекта:


Объект = Данные + Операции


На основании этой формулы была разработана методология объектно-ориентированного программирования (ООП).

Об объектах можно думать как о полезных существах, которые "живут" в вашей программе и коллективно решают некоторую прикладную задачу. Вы лепите этих существ, распределяете между ними обязанности и устанавливаете правила их взаимодействия.

В общем случае каждый объект "помнит" необходимую информацию, "умеет" выполнять некоторый набор действий и характеризуется набором свойств. То, что объект "помнит", хранится в его полях. То, что объект "умеет делать", реализуется в виде его внутренних процедур и функций, называемых методами. Свойства объектов аналогичны свойствам, которые мы наблюдаем у обычных предметов. Значения свойств можно устанавливать и читать. Программно свойства реализуются через поля и методы.

Например, объект "кнопка" имеет свойство "цвет". Значение цвета кнопка запоминает в одном из своих полей. При изменении значения свойства "цвет" вызывается метод, который перерисовывает кнопку.

Кстати, этот пример позволяет сделать важный вывод: свойства имеют первостепенное значение для программиста, использующего объект. Чтобы понять суть и назначение объекта, вы обязательно должны знать его свойства, иногда - методы, очень редко - поля (объект и сам знает, что с ними делать).

ОБЪЕКТЫ И КОМПОНЕНТЫ. С появлением графических систем, в частности Windows, программирование пользовательского интерфейса резко усложнилось. Программист в какой-то мере стал дизайнером, а визуальная компоновка и увязка элементов пользовательского интерфейса (кнопок, меток, строк редактора) начали отнимать основную часть времени. И тогда программистам пришла в голову идея визуализировать объекты, объединив программную часть объекта с его видимым представлением на экране дисплея в одно целое. То, что получилось в результате, было названо компонентом.

Компоненты - это особые объекты, которые являются строительными кирпичиками среды визуальной разработки и приспособлены к визуальной установке свойств. Чтобы превратить объект в компонент, первый разрабатывается по определенным правилам, а затем помещается в Палитру Компонентов. Конструируя приложение, вы берете компоненты из Палитры Компонентов, располагаете на форме и устанавливаете их свойства в окне Инспектора Объектов. Внешне все выглядит просто, но чтобы постичь такой простоты, потребовалось создать механизмы, обеспечивающие функционирование объектов-компонентов уже на этапе проектирования приложения! Таким образом, компонентный подход значительно упростил создание приложений с графическим пользовательским интерфейсом и дал толчок развитию новой индустрии компонентов.

КЛАССЫ ОБЪЕКТОВ. Каждый объект всегда принадлежит некоторому классу. Класс - это обобщенное (абстрактное) описание множества однотипных объектов. Объекты являются конкретными представителями своего класса, их принято называть экземплярами класса. Например, класс СОБАКИ - понятие абстрактное, а экземпляр этого класса МОЙ ПЕС БОБИК - понятие конкретное.

ТРИ ПАРАДИГМЫ (ПРИНЦИПА) ООП ООП держится на трех принципах: инкапсуляции, наследовании и полиморфизме.

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

Второй принцип ООП - наследование. Этот простой принцип означает, что если вы хотите создать новый класс, лишь немногим отличающийся от того, что уже существует, то нет необходимости в переписывании заново всех полей, методов и свойств. Вы объявляете, что новый класс является потомком (или дочерним классом) имеющегося класса, называемого предком (или родительским классом), и добавляете к нему новые поля, методы и свойства. Иными словами добавляется то, что нужно для перехода от общего к частному. Процесс порождения новых классов на основе других классов называется наследованием. Новые классы имеют как унаследованные признаки, так и, возможно, новые. Например, класс СОБАКИ унаследовал многие свойства своих предков - ВОЛКОВ Третий принцип - это полиморфизм. Он означает, что в производных классах вы можете изменять работу уже существующих в базовом классе методов. При этом весь программный код, управляющий объектами родительского класса, пригоден для управления объектами дочернего класса без всякой модификации. Например, вы можете породить новый класс кнопок с рельефной надписью, переопределив метод отрисовки кнопки. Новую кнопку можно "подсунуть" вместо стандартной в какую-нибудь подпрограмму, вызывающую отрисовку кнопки. При этом подпрограмма "думает", что работает со стандартной кнопкой, но на самом деле кнопка принадлежит производному классу и отображается в новом стиле.

Объектно-ориентированное программирование в настоящее время является абсолютным лидером в области прикладного программирования (языки Java, C#, C++, JavaScript, ActionScript и др.). В то же время в области системного программирования до сих пор лидирует парадигма процедурного программирования, и основным языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, мультиплатформенным стандартом стала система Qt, написанная на языке C++.

Си++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей Си++ является надмножеством языка программирования Cи.


COM - объекты


COM (англ.component Object Model - объектная модель компонентов) - это технологический стандарт от компании Microsoft, предназначенный для создания программного обеспечения на основе взаимодействующих компонентов, каждый из которых может использоваться во многих программах одновременно. Стандарт воплощает в себе идеи полиморфизма и инкапсуляции объектно-ориентированного программирования. Стандарт COM мог бы быть универсальным и платформо-независимым, но закрепился в основном на операционных системах семейства Microsoft Windows. В современных версиях Windows COM используется очень широко. На основе COM были реализованы технологии: Microsoft OLE Automation, ActiveX, DCOM, COM+, DirectX, а также XPCOM.

Программы, построенные на стандарте COM, фактически не являются автономными программами, а представляют собой набор взаимодействующих между собой COM-компонентов. Каждый компонент имеет уникальный идентификатор (GUID) и может одновременно использоваться многими программами. Компонент взаимодействует с другими программами через COM-интерфейсы - наборы абстрактных функций и свойств. Каждый COM-компонент должен, как минимум, поддерживать стандартный интерфейс "IUnknown", который предоставляет базовые средства для работы с компонентом. Интерфейс "IUnknown" включает в себя три метода: QueryInterface, AddRef, Release.API предоставляет базовые функции, позволяющие использовать COM-компоненты. Библиотеки MFC и, особенно, ATL/WTL предоставляют более гибкие и удобные средства для работы с COM. Библиотека ATL от Microsoft до сих пор остаётся самым популярным средством создания COM-компонентов. Но зачастую COM-разработка остаётся ещё довольно сложным делом, программистам приходится вручную выполнять многие рутинные задачи, связанные с COM (особенно это заметно в случае разработки на C++). Впоследствии (в технологиях COM+ и особенно.net) Microsoft попыталась упростить задачу разработки COM-компонентов.

объектный ориентированный программирование информационный

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

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

Другое важное свойство СОМ известно под названием независимости от местоположения (Location Transparency). Независимость от местоположения означает, что пользователь компонента, клиент, не обязательно должен знать, где находится определенный компонент. Клиентское приложение использует одинаковые сервисы СОМ для создания экземпляра и использования компонента независимо от его фактического расположения. Компонент может находиться непосредственно в адресном пространстве задачи клиента (DLL-файл), в пространстве другой задачи на том же компьютере (ЕХЕ-файл) или на компьютере, расположенном за сотни миль (распределенный объект). Технологии СОМ и DCOM (Distributed СОМ - распределенная СОМ) обеспечивают независимость от местоположения. Другими средствами, реализующими эту способность, являются сервисы распределенных объектов. Поскольку клиентское приложение взаимодействует с СОМ - компонентами, вне зависимости от их положения, одинаковым образом, интерфейс клиента тоже не меняется. Независимость от местоположения позволяет разработчику создавать масштабируемые приложения.

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


ActiveX - объекты


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

Автором технологии ActiveX является лидер мировой индустрии программирования - компания Microsoft. Родителем технологии ActiveX можно назвать технологию OLE версии 1, а старшим братом - OLE 2.

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

В 1996 Microsoft "родила новый термин - ActiveX. Сначала этот термин относился только к технологиям, связанным с Internet. Затем он стал "захватывать территории, традиционно принадлежащие OLE. И на осень 1997 года, состояние дел представлялось следующим образом:- технология создания составных документов- все семейство технологий на основе COM

Достаточно точное, но весьма "заумное" определение технологии ActiveX звучит следующим образом:- это расширяемая архитектура, основанная на множестве элементарных унифицированных приспосабливаемых к требованиям пользователя (кастомизируемых) сервисов, каждый из которых обеспечивает создание пользовательских сервисов любой сложности, которые в свою очередь расширяют данную архитектуру. Все сервисы, вне зависимости от их сложности, реализации, места в памяти и места их выполнения, могут быть использованы всеми приложениями, ОС, либо другими сервисами.- это не технология для написания частей приложения (как например, Win32 API). ActiveX применяется для совместного использования частей приложения с чем-либо еще и для доступа к таким разделяемым компонентам.

Базовые понятия технологий ActiveX:

Сервисы и компоненты

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

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

Реально сервис может состоять из одной и более компонент, но наиболее часто компонента и является сервисом. В любом случае, сама компонента состоит из одного или более объектов, где каждый объект обеспечивает свои функциональность и содержимое через один или более интерфейсов. В свою очередь, интерфейс содержит одну или более функций-членов (методов). Именно через них компонента и может делать нечто.

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

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

Подход, исповедуемый компонентной технологией, отличается также от подхода, принятого в открытой архитектуре сервисов Windows (Windows Open Service Architecture - WOSA). Если в WOSA между клиентом и сервисами должен был находится некий менеджер, который бы управлял ходом работ (например, в MAPI, ODBC и т.п.), то при компонентном подходе и использовании СОМ СОМ отвечает лишь за установление соединения, а дальше клиент и компонента общаются напрямую.

Смысл существования технологии ActiveX - способствовать развитию компонентного программного обеспечения и интеграции компонент.

Клиенты и серверы

Как отмечалось ранее, сервис или компонента состоит из одного или более объектов, каждый из которых реализует определенный набор свойств компоненты. Эти объекты устанавливают коммуникационные каналы между пользователем этих объектов - некоторым фрагментом кода, и тем, кто обеспечивает этот объект (провайдером). Будем называть:

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

сервером - фрагмент кода, который отвечает за обеспечение клиентов компонентами и составляющими их объектами.

С точки зрения программирования сервер - это загружаемый по запросу модуль, такой как DLL или EXE, который делает компоненты и их объекты доступными из внешнего мира. Без сервера объекты оставались бы скрытыми от внешнего мира. Сервер как бы "держит их на серебряной тарелочке и предлагает отведать клиентам.


Принципы и применение описаний информационных систем (UML и аналоги)


Унифицированный язык моделирования (UML) - это семейство графических нотаций. Он помогает в описании и проектировании программных систем, в особенности систем, построенных с использованием объектно-ориентированной парадигмы.

Графические языки моделирования уже продолжительное время широко используются в программной индустрии. Основная причина их появления состоит в том, что языки программирования не обеспечивают нужный уровень абстракции, способный обеспечить процесс проектирования.представляет собой относительно открытый стандарт, находящийся под управлением группы OMG (Object Management Group), открытого консорциума компаний. Группа OMG была сформирована для создания стандартов, поддерживающих межсистемное взаимодействие, в частности взаимодействие объектно-ориентированных систем. Возможно, группа OMG более известна по стандартам CORBA (Common Object Request Broker Architecture).

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


Способы применения UML


Основу роли UML в разработке программного обеспечения составляют разнообразные способы использования языка, те различия, которые были перенесены из других языков графического моделирования. Эти различия провоцируют дискуссии о том, как должен применяться язык.

Варианты применения широки и зависят от вкусов конкретного разработчика. В первую очередь можно разделить эти варианты по глубине проработки диаграммы на режим эскизирования, режим проектирования и режим программирования.

Сущность эскизирования, или эскизного моделирования, в избирательности. В процессе разработки вы делаете наброски, которые, за тем, обсуждаете с другими программистами. С помощью эскизов вы можете упростить процесс обмена идеями, формализовать идею на бумаге.

Напротив, язык UML как средство проектирования нацелен на полноту. Идея заключается в том, что проект разрабатывается архитектором, чья работа заключается в построении детальной модели, и отдается по частям или полностью исполнителям проекта. Такая модель должна быть достаточно полной в части заложенных решений, а программист должен иметь возможность следовать им прямо, не особо задумываясь над деталями.

Чем дольше вы работаете с UML, а программирование становится все более механическим, тем очевиднее становится необходимость перехода к автоматизированному созданию программ. Действительно, многие редакторы UML позволяют автоматизировать построение значительной части системы. В конце концов, вы достигнете такой точки, когда сможете описать с помощью UML всю систему и перейдете в режим использования UML в качестве языка программирования.

Диаграммы UML

UML насчитывает большое количество типов диаграмм и частота их использования зависит от области применения и конкретного разработчика. В области программирования игр наиболее полезными диаграммами можно назвать диаграммы классов, диаграммы последовательностей и диаграммы состояний (конечных автоматов). Вот несколько примеров диаграмм UML.


Диаграмма классов:


Диаграмма последовательностей:


Диаграмма состояний:


Практическая часть


Описание задачи.

Задание: создать с помощью С++ Builder удаленный сервер автоматизации, включить клиентскую часть ActiveX в HTML страницу. В объект ActiveX поместить собственную компоненту построения графика заданной функции с настраиваемыми в Инспекторе Объектов цветом линии, координатами расположения, видимостью и коэффициентами функции.

Клиент должен иметь возможность указать диапазон значений оси X и коэффициенты указанной функции. Расчетные значения для построения графика должны рассчитываться на удаленном сервере и передаваться клиентскому объекту.

Вариант №: 17


Функция: Y= (a/X) b


Диаграмма-представление системы


Анализ разрабатываемых классов: данные и функции для каждого, причины внедрения и использования

Функции реализации получения данных, а так же все операции по авторизации OLE объекта в операционной системе вынесены в отдельный класс, помещенные под названием Function. Cpp/h Данные передаются от клиента к серверу, на сервере выполняется расчет и возврат данных.

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

Класс - разновидность абстрактного типа данных <#"center">Заключение


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

Список литературы


1. М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. - Москва: Мир, 1992.445с.

. Г. Шилдт. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998.620с.

. Х. Дейтел, П. Дейтел. Как программировать на C++: Пер. с англ. - Москва: ЗАО "Издательство БИНОМ", 1998.1024с.


Приложения


Приложение 1 Исходный код программы


Server:

#include <vcl. h>

#pragma hdrstop

#include "Unit1. h"

#include "math. h"

// ---------------------------------------------------------------------------

#pragma package (smart_init)

#pragma resource "*. dfm"*Form1;

// ---------------------------------------------------------------------------

__fastcall TForm1:: TForm1 (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button1Click (TObject *Sender)

{();

}

// ---------------------------------------------------------------------------

// // Функция расчета задания Вариант 17: (a/x) ^b, т.е. pow (Y,b)

double __fastcall TForm1:: calculateY (int x, double a, double b)

{res = a / x; // выполняем расчет согласно формуле по варианту(res < 0) res *= - 1;pow (res,b); // возводим в степень b и возвращаем результат

}

// ---------------------------------------------------------------------------

Файл Класса Function Y:

// CALCULATEYIMPL. H: Declaration of the TCalculateYImpl

#ifndef CalculateYImplH

#define CalculateYImplH

#define ATL_APARTMENT_THREADED

#include "Project1_TLB. H"

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /

// TCalculateYImpl Implements ICalculateY, default interface of CalculateY

// ThreadingModel: Apartment

// Dual Interface: TRUE

// Event Support: FALSE

// Default ProgID: Project1. CalculateY

// Description: My course work

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /ATL_NO_VTABLE TCalculateYImpl:CComObjectRootEx<CComSingleThreadModel>,CComCoClass<TCalculateYImpl, &CLSID_CalculateY>,IDispatchImpl<ICalculateY, &IID_ICalculateY, &LIBID_Project1>

{:()

{

}

// Data used when registering Object

// _THREADING_MODEL (otApartment);_PROGID ("Project1. CalculateY");_DESCRIPTION ("My course work");

// Function invoked to (un) register object

// HRESULT WINAPI UpdateRegistry (BOOL bRegister)

{<TCalculateYImpl>(GetObjectCLSID (), GetProgID (), GetDescription ());regObj. UpdateRegistry (bRegister);

}_COM_MAP (TCalculateYImpl)_INTERFACE_ENTRY (ICalculateY)_INTERFACE_ENTRY2 (IDispatch, ICalculateY)_COM_MAP ()

// ICalculateY:(CalculateY (int x, double a, double b, double* y));

};

#endif // CalculateYImplH

Исходный код клиента:

// ---------------------------------------------------------------------------

/*

Клиентское приложение расчета функции Y

Выполнил Крюков П. Г, группа ВМКСС-326

*/

#include <vcl. h>

#pragma hdrstop

#include "Unit1. h"

#include <ComObj. hpp>

// ---------------------------------------------------------------------------

#pragma package (smart_init)

#pragma resource "*. dfm"*Form1;

// ---------------------------------------------------------------------------

__fastcall TForm1:: TForm1 (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: FormCreate (TObject *Sender)

{->Checked = true;

}

// ---------------------------------------------------------------------------

// Обработчик события нажатия на кнопку Button1__fastcall TForm1:: Button1Click (TObject *Sender)

{x0, xn;a, b;

{= LabeledEdit1->Text. ToInt ();= LabeledEdit2->Text. ToInt ();= LabeledEdit3->Text. ToDouble ();= LabeledEdit3->Text. ToDouble ();server = CreateOleObject ("Project1. CalculateY");(VarType (server) == varDispatch) {*series = Chart1->GetASeries ();>Clear ();(int i = x0; i <= xn; ++i)>AddXY (i, server. OleFunction ("calculateY", i, a, b), "", ColorBox1->Selected);

}(VarType (server) == varDispatch) server = Unassigned;

}(Exception &e)

{(e. Message. c_str ());

}

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button2Click (TObject *Sender)

{*series = Chart1->GetASeries ();>Clear ();

}

// ---------------------------------------------------------------------------__fastcall TForm1:: CheckBox1Click (TObject *Sender)

{->Visible = CheckBox1->Checked;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button3Click (TObject *Sender)

{();

}

// --------------------------------------------------------------------------

void __fastcall TForm1:: N2Click (TObject *Sender)

{->Click ();

}

// ---------------------------------------------------------------------------__fastcall TForm1:: N3Click (TObject *Sender)

{();

}

// ---------------------------------------------------------------------------__fastcall TForm1:: N4Click (TObject *Sender)

{("Выполнил Крюков П.Г., ВМКСС-326");

}

// ---------------------------------------------------------------------------

Исходный код клиента ActiveX Form:

#include <vcl. h>

#pragma hdrstop

#include <atl\atlvcl. h>

#include "MyCourseProjectImpl1. h"("MyCourseProjectImpl1. cpp", MyCourseProject); /* TActiveForm: File Type */ /* MyCourseProject: CoClass */

// ---------------------------------------------------------------------------

#pragma package (smart_init)MyCourseProjectProj1Module;&_Module = MyCourseProjectProj1Module;

// The ATL Object map holds an array of _ATL_OBJMAP_ENTRY structures that

// described the objects of your OLE server. The MAP is handed to your

// project's CComModule-derived _Module object via the Init method.

// _OBJECT_MAP (ObjectMap)_ENTRY (CLSID_MyCourseProject, TMyCourseProjectImpl)_OBJECT_MAP ()

// Entry point of your Server invoked by Windows for processes or threads are

// initialized or terminated.

// WINAPI DllEntryPoint (HINSTANCE hinst, unsigned long reason, void*)

{(reason == DLL_PROCESS_ATTACH)

{

_Module. Init (ObjectMap, hinst);(hinst);

}TRUE;

}

// _Module. Term is typically invoked from the DLL_PROCESS_DETACH of your

// DllEntryPoint. However, this may result in an incorrect shutdown sequence.

// Instead an Exit routine is setup to invoke the cleanup routine

// CComModule:: Term.

// ModuleTerm (void)

{

_Module. Term ();

}

#pragma exit ModuleTerm 63

// Entry point of your Server invoked to inquire whether the DLL is no

// longer in use and should be unloaded.

// __export DllCanUnloadNow (void)

{(_Module. GetLockCount () ==0)? S_OK: S_FALSE;

}

// Entry point of your Server allowing OLE to retrieve a class object from

// your Server

// __export DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID* ppv)

{_Module. GetClassObject (rclsid, riid, ppv);

}

// Entry point of your Server invoked to instruct the server to create

// registry entries for all classes supported by the module

// __export DllRegisterServer (void)

{_Module. RegisterServer (TRUE);

}

// Entry point of your Server invoked to instruct the server to remove

// all registry entries created through DllRegisterServer.

// __export DllUnregisterServer (void)

{_Module. UnregisterServer ();

}

// ---------------------------------------------------------------------------

Приложение 2: Скриншот программе




Содержание Введение ООП и его место в современном программировании COM - объекты ActiveX - объекты Принципы и применение описаний информацион

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ