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

Презентация:



Advertisements
Похожие презентации
1 ИССЛЕДОВАНИЕ ВОЗМОЖНОСТЕЙ COM- ТЕХНОЛОГИИ ДЛЯ ПОСТРОЕНИЯ РАСПРЕДЕЛЕННЫХ ПРОГРАММНЫХ ПРОДУКТОВ Component Object Model Министерство образования и науки.
Advertisements

Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – Модули HTTP, фильтры, события приложения - Global.asax.
ДонНУ, кафедра КТ, проф.В.К.Толстых Web-службы (Web-сервисы) введение введение Разработка в среде Delphi Из цикла лекций «Internet-технологии разработки.
П рограммное обеспечение (англ. software) – это совокупность программ, обеспечивающих функционирование компьютеров и решение с их помощью задач предметных.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Тренинг «Разработка веб-приложений на ASP.NET» Занятие 1 Знакомство с ASP.NET Гайдар Магдануров
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Загруженная в оперативную память программа (ЕХЕ-файл) становится процессом. Процесс - это выполняемая программа, процесс имеет свою память, описатели.
Архитектура операционных систем. Архитектура ОС Состав модулей (компонент) ОС Структура связей между отдельными модулями ОС Принципы взаимодействия модулей.
Архитектура операционных систем Семестр 2, Лекция 1.
Тестирование программных средств Сафронов Сергей, 2007 год.
Разработка пользовательских интерфейсов Выполнил: Бредихин Юрий Вячеславович студент 3 курса, 31-И группы Старый Оскол, 2015.
Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
WebMonitor План Установка Установка на кластеры и NLB Лицензирование Работа продукта Процесс обновления Решение общих проблем.
1. ЧТО ТАКОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ? НАБОР ПРОГРАММ В ПАМЯТИ КОМПЬЮТЕРА 2. ИЗ КАКИХ ЧАСТЕЙ СОСТОИТ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ? КРОССОВЫЕ ТЕСТОВЫЕ СИСТЕМНЫЕ.
Разработка программного обеспечения (Software Engineering) Ian Sommervillle Часть 8. Управление качеством.
Дружественные функции Дружественные функции – это функции, объявленные вне класса, но имеющие доступ к закрытым и защищенным полям данного класса Дружественная.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – ASP.NET-процесс, пул, домен приложения, компиляция,
Научно-образовательная электронная библиотека вуза © А.Г. Абросимов, Д.С. Зуев Казанский государственный университет.
Транксрипт:

Алексей Игнатенко

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

Улучшение качества и однородности кода Четкая инкапсуляция деталей реализации за интерфейсами Инкапсуляция сторонних библиотек Улучшение модульности проекта В каждый момент времени идет работа с небольшим подмножеством файлов Лучший способ организации больших проектов Радикальное уменьшение времени сборки Не производится обработка внутренних заголовочных файлов для других компонент Не требуется пересборка других компонент Возможность замены компонентов Возможность обновления не всей программы, а только набора компонент Возможность выбора из нескольких однотипных компонент (конфигурация) Возможность использования компонент с различными открытыми/закрытыми лицензиями Таким образом можно использовать GPL-компоненты и раскрывать их код, не нарушая лицензии

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

Обычные DLL связываются на этапе компиляции Компоненты подгружаются во время выполнения в два этапа: Поиск всех компонент (в определенном каталоге) Регистрация найденных компонент в определенном месте системы

DLL: IPlugin *createInstance(const char *); Application: IPlugin* pluginInstance = createInstance(RendererPlugin); IRenderer* renderer = dynamic_cast (pluginInstance)

Одно из трех: Нарушается безопасность типов static_cast Ограничивается применение плагинов dynamic_cast Необходима разработка сложной и ломкой кастомной RTTI QueryInterface Необходимы дополнительные соглашения для поиска однотипных плагинов (по имени, например)

Интерфейсы определяется в приложении Для интерфейсов применяются соглашения COM Плагины региструются сами в нужном месте системы

Application: DLL:

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

А нужно ли поддерживать возможность работы из разных сред? Версии интерфейсов / библиотек Суперклассы - да/нет Приведение типов Подсчет ссылок Как искать плагины? События

Если нет требований, чтобы плагины и/или основное приложение работали из разных сред, нет смысла поддерживать соглашения COM Не нужны STDMETHODCALLTYPE, BSTR и т.п. Можно выделять и удалять память в разных DLL (это стоит проверить) Более того: можно использовать набор базовых неабстрактных классов и подключать общую библиотеку ко всем плагинам Внимание: но нужно очень четко работать с версиями в этом случае!

Проверять версии 1) У библиотеки (DLL) 2) У плагина (интерфейса) Как проверять? Как поддерживать совместимость? Старые плагины должны работать с новыми интерфейсами? Новые плагины должны работать со старыми интерфейсами?

Функции: запрос на информацию без создания экземпляра = статические функции Создание объекта = фабрика Нужны ли? Накладные расохды на создание/поддержку

Dynamic_cast QueryInterface

AddRef/Release – единственный вариант. Есть ли другие возможности? Если нет, почему?

Перебор файлов в папках Конфиг-файл (XML – рекомендуется MS) В реестре (пишется инсталлятором)