- •Методические указания к лабораторным работам
- •Лабораторная работа №1 простые программы с циклами и операторами консольного ввода/вывода
- •Задание
- •Описание примера
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №2 работа с текстовыми файлами, структурами данных и меню
- •Задание
- •Структурное программирование и функциональная декомпозиция системы
- •Функции
- •Организация меню в консольном приложении
- •Структуры данных
- •Операции с файлами
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №3 разработка и спецификация функций и модулей программы
- •Задание
- •Модульная структура программ
- •Параметры командной строки
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №4 разработка и спецификация структур данных, использование указателей и динамических массивов структур
- •Задание
- •Указатели
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №5 использование объектно-ориентированного программирования в разработке приложений
- •Задание
- •Конструкторы и деструкторы
- •Конструктор по умолчанию
- •Конструктор копирования
- •Массивы объектов
- •Friend-конструкции
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №6 использование наследования, полиморфизма и абстрактных классов
- •Задание
- •Наследование данных и методов
- •Полиморфизм и виртуальные функции
- •Абстрактный класс
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №7
- •Сложные структуры из объектов классов
- •Цель работы - изучение организации различных структур данных и разработка методов манипулирования данными.
- •Задание
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №8 разработка windows-интерфейса приложения
- •Задание
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа №9 разработка и использование com-сервера
- •Задание
- •Шаблоны классов
- •Использование библиотеки atl для создания серверов сом
- •Методика выполнения
- •Содержание отчета
- •Контрольные вопросы
- •Литература
Методика выполнения
Запустите MS Visual Studio и создайте проект Windows-приложения.
Разработайте графический интерфейс пользователя и экранную форму с учетом требований задания.
Скопируйте и подключите к проекту модули объявления и определения классов из работы №8.
Определите обработчики событий при нажатии кнопок и выбора пунктов меню для операций добавления, удаления, редактирования, отображения, поиска и сортировки.
Переопределите методы классов, выполняющие операции консольного ввода/вывода, с учетом использования элементов графического интерфейса пользователя.
Содержание отчета
Отчет готовится в письменном или печатном виде один на бригаду. В отчет включить копию экранной формы приложения, листинги модулей, результаты тестовых прогонов программы. Листинги должны содержать спецификации модулей и функций, иметь структурированный вид и комментарии.
Контрольные вопросы
Назовите основные элементы управления, из которых строится графический интерфейс пользователя Windows-приложения?
Объясните устройство основных компонентов Windows-интерфейса пользователя – окно, блок диалога, элемент управления, кнопка, редактор, список, комбинированный список, полоса прокрутки, метка.
Объясните устройство дополнительных элементов управления – изменяемый список, просмотр списка, строка состояния, подсказка, просмотр деревьев, вкладка, окно свойств, индикатор.
Что такое ресурсы приложения?
Объясните суть понятия интерфейс программирования приложения(API).
Что такое оконная процедура? Как работают программы, управляемые событиями?
В чем заключается визуальное программирование, его достоинства и недостатки?
Объясните назначение функции WinMain.
Лабораторная работа №9 разработка и использование com-сервера
Цель работы – освоение на практике методов создания COM-серверов с помощью библиотеки ATL и их использование в приложениях на C++.
Задание
Разработать на языке С++ с помощью библиотеки ATL внутрипроцессный COM-сервер для установки и проверки прав доступа пользователей к функциям приложения.
Список пользователей и права доступа хранить в виде файла на диске в рабочем каталоге сервера доступа.
Интерфейс COM-сервера должен содержать методы для добавления, удаления и редактирования записей о пользователях, а также метод для проверки права пользователя на доступ к функции.
В версию приложения из работы №8 добавить вызов при загрузке приложения метода подключения к COM-северу. Если пользователю запрещена работа с приложением, то должен быть предусмотрен автоматический выход из приложения.
Добавить в меню приложения вызов функций добавления, удаления и редактирования записей о пользователях.
Перед вызовом каждой функции приложения выполнять проверку права доступа пользователя к данной функции и исполнять только разрешенные функции.
Краткая теория
Основные понятия COM-технологии
Компонентный подход предполагает построение программного обеспечения из отдельных компонентов - физически отдельно существующих частей программного обеспечения, которые взаимодействуют между собой через стандартизованные двоичные интерфейсы. В отличие от обычных объектов объекты-компоненты можно собрать в динамически вызываемые библиотеки или исполняемые файлы, распространять в двоичном виде (без исходных текстов) и использовать в любом языке программирования, поддерживающем соответствующую технологию.
Компонентный подход лежит в основе COM-технологии фирмы Microsoft. По технологии СОМ приложение предоставляет свои службы, используя специальные объекты - объекты СОМ, которые являются экземплярами классов СОM. Объект СОМ так же, как обычный объект включает поля и методы, но в отличие от обычных объектов каждый объект СОМ может реализовывать несколько интерфейсов, обеспечивающих доступ к его полям и функциям. Это достигается за счет организации отдельной таблицы адресов методов для каждого интерфейса (по типу таблиц виртуальных методов). При этом интерфейс обычно объединяет несколько однотипных функций. Кроме того, классы СОМ поддерживают наследование интерфейсов, но не поддерживают наследования реализации, т. е. не наследуют код методов, хотя при необходимости объект класса-потомка может вызвать метод родителя.
Каждый интерфейс имеет два имени: символьное неуникальное имя, начинающееся с символа «I», например, IAccessControl, и глобальный уникальный идентификатор интерфейса IID (Interface IDentifier). Любой глобально уникальный идентификатор (GUID) представляет собой автоматически генерируемое 128-разрядное двоичное число (16 байтов).
Любой объект СОМ обязательно реализует интерфейс IUnknown. Использование этого интерфейса позволяет управлять временам жизни объекта (методы AddRef() и Release()) и получать доступ к остальным интерфейсам объекта (метод QueryInterface()). IUnknown является главным интерфейсом для COM, все остальные интерфейсы – его наследники, т.е. наследуют все его операции.
Объект всегда функционирует в составе сервера — динамической библиотеки или исполняемого файла, которые обеспечивают функционирование объекта. Различают три типа серверов:
внутрипроцессный сервер - реализуется динамическими библиотеками (DLL), которые подключаются к приложению-клиенту и работают в одном с ними адресном пространстве - наиболее эффективный сервер, кроме того, он не требует специальных средств;
локальный сервер - создается отдельным процессом, который работает на одном компьютере с клиентом;
удаленный сервер - создается процессом, который работает на другом компьютере.
Для обращения к службам клиент должен получить указатель на соответствующий интерфейс. Клиенту требуется отдельный указатель для каждого интерфейса, операции которого он намерен использовать. Перед первым обращением к объекту клиент посылает запрос к библиотеке СОМ, хранящей информацию обо всех, зарегистрированных в системе классах СОМ объектов, и передает ей имя класса, идентификатор интерфейса и тип сервера. Библиотека запускает необходимый сервер, создает требуемые объекты и возвращает указатели на объекты и интерфейсы. Получив указатели, клиент может вызывать необходимые функции объекта аналогично вызову локальной функции.
Взаимодействие клиента и сервера обеспечивается базовыми механизмами СОМ, поэтому клиенту безразлично местонахождение объекта. При использовании локальных и удаленных серверов в адресном пространстве клиента создается рrоху-объект - заместитель объекта СОМ, а в адресном пространстве сервера СОМ — заглушка, соответствующая клиенту. Получив задание от клиента, заместитель упаковывает его параметры и, используя службы операционной системы, передает вызов заглушке. Заглушка распаковывает задание и передает его объекту СОМ. Результат возвращается клиенту в обратном порядке. Такой механизм называется маршалингом.
Создание COM-объекта базируется на использовании функций библиотеки COM. Доступ к услугам библиотеки выполняется с помощью вызовов обычных функций, имена которых чаще всего начинаются с префикса «Co», например, CoCreateInstance – создание COM-объекта по идентификатору его класса CLSID и идентификатору интерфейса IID. При этом для определения местоположения исполняемого файла или DLL, который нужно запустить или загрузить, используется системный реестр.
При другом способе клиент может создать несколько COM-объектов одного и того же класса. Для этого используется фабрика класса – COM-объект, генерирующий объекты одного конкретного класса. Фабрика класса поддерживает интерфейс IClassFactory с методами CreateInstance и LockServer. Первый создает COM-объекты этого класса и возвращает указатель на нужный интерфейс, а второй сохраняет фабрику класса в памяти. Клиент вызывает фабрику класса с помощью функции библиотеки COM CoGetClassObject(<CLSID объекта>,<IID интерфейса IClassFactory>), которая возвращает указатель на интерфейс IClassFactory.