Технология разработки программного обеспечения систем управления
Объект и класс как основа объектно-ориентированного языка программирования. Методология построения и использования принципов объектно-ориентированного программирования и программирования под Windows на языке C++ при проектировании систем управления.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | учебное пособие |
Язык | русский |
Дата добавления | 07.10.2013 |
Размер файла | 744,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Для создания модального диалогового сначала создают ресурс диалогового окна, и с помощью ClassWizard создают новый класс диалогового окна, порожденного от класса CDialog. Для вызова диалогового окна используют функцию DoModal( );. Для возвращения из модального диалогового окна значений в программу можно в классе диалогового окна объявить поля или функции.
Пример реализации программы
Задание: написать программу, вычисляющую значение интеграла функции по следующей приближенной формуле:
где a,b - границы интегрирования;
N - число разбиений;
h - шаг,
h=(b-a)/N, .
Число разбиений должно задаваться с помощью элемента Slider, а скорость вычисления интеграла проконтролируем элементом Progress. Границы интегрирования необходимо задавать в модальном диалоговом окне.
Для решения задачи необходимо создать проект на основе диалогового окна (имя: CLabProgressBar), на втором шаге отключив опцию About Box. Используя панель Controls, нанести на заготовку формы - 1 элемент типа Edit Box, 2 - Static Text 2 - Button, 1 - Slider, 1- Progress. Название кнопки «OK» переименовать в «Выход» (рисунок 1).
Рисунок 1. - Результат работы программы
С помощью мастера ClassWizard связать компонент EditBox с переменной m_res типа double, компонент Progress с переменной m_progress, выбрав ее тип как CProgressCtrl, а элемент управления Slider с переменной m_slider, выбрав ее тип как CSliderCtrl.
Для создания модального диалогового окна в закладке ResourseView окна Workspase во всплывающем меню требуется выбрать пункт Insert, после чего появиться диалог Insert Resource, изображенный на рисунке 2.
Рисунок 2. - Панель Insert Resource
В диалоге Insert Resource следует выбрать пункт Dialog и нажать кнопку New, после чего появится заготовка нового окна. Создать окно, аналогичное снимку на рисунке 3.
Рисунок 3. - Окно для ввода данных
После создания ресурса диалогового окна следует создать класс для работы с ним. Для этого в основном меню надо выбрать пункт Insert и далее New Class, после чего появиться диалог New Class (рисунок 4). В поле Name требуется ввести имя класса, например CMyDialog. В выпадающем списке Base Class требуется выбрать в качестве базового класса CDialog. В списке Dialog ID должен стоять идентификатор созданного ранее диалогового окна, по умолчанию для первого окна это значение IDD_DIALOG1.
Рисунок 4. - Панель диалога New Class
После создания класса диалогового окна с помощью мастера Class Wizard связать поля ввода с переменными m_a и m_b типа double. Для создания экземпляра класса диалогового окна, объявить поле в классе главного окна.
Далее сделать необходимые добавления в тексте файлов проекта.
Ниже приведен фрагмент заголовочного фйла класса главного окна с необходимыми добавками.
// CLabProgressBarDlg dialog
#include "MyDialog.h" //подключили заголовочный файл класса модального //диалога.
class CLabProgressBarDlg : public CDialog
{// Construction
public:CLabProgressBarDlg(CWnd* pParent = NULL); // standard constructor
CMyDialog d; //объявили переменную класса модального диалога.
// Dialog Data
//{{AFX_DATA(CLabProgressBarDlg)
Далее в основной файл ClabProgressBarDlg.cpp в конце метода:
BOOL CLabProgressBarDlg::OnInitDialog():
// TODO: Add extra initialization here
m_slider.SetRange(100,1000000);
// устанавливаем диапазон в элементе Slider
m_slider.SetPos(50000);
//устанавливаем положение ползунка
return TRUE; // return TRUE unless you set the focus to a control
}
И наконец тексты щелчков на кнопках:
void CLabProgressBarDlg::OnButton1()
{
//обработчик кнопки Граничные условия.
d.DoModal(); //вызов модального окна
}void CLabProgressBarDlg::OnButton2()
{
//обработчик кнопки Пуск.
CWaitCursor w; //класс для установки курсора - часы.
double s=0;
double x=d.m_a; //считывание из диалога нач. значения.
double h=(d.m_b-x)/m_slider.GetPos(); //вычисление h=(b-a)/N
int i=0;
while(x<d.m_b)
{
double f=x*x; //числение квадрата икса
s+=f*h; // вычисление суммы
x+=h;
m_progress.SetPos(100*i++/m_slider.GetPos());
//установка положения в полосы в Progress
}
m_res=s;
UpdateData(0);
}
· Варианты заданий
Проверьте правильность выражений, вычислив интеграл:
1. 6.
2. 7.
3. 8.
4. 9.
5. 10.
· Контрольные вопросы
1. Опишите принципы работы элементов управления Progress и Slider.
2. Назовите свойства модального и немодального диалоговых окон.
3. Опишите процесс создания модального диалогового окна.
14. Лабораторная работа №14. MDI - приложение. Работа с данными в архитектуре «Документ/представление» («Document/view»)
Цель работы - использовать принципы архитектуры «Документ-Представление» для выборки и сохранения данных в файлах, а также взаимодействия элементов меню, панели инструментов и строки состояния в приложении.
· Теоретические сведения
Архитектура «Документ-Представление»
В основе этой архитектуры лежат три глобальных понятия - фрейм, документ и представление. Под документом понимается те данные, с которыми работает приложение. Это может быть все, что угодно, - «простой текст», картинка и т.п. Отображение этих данных на экране осуществляется во фрейме документа. Фрейм содержит специальные окна - представления (Views), в которых отображают данные документа, и осуществляет координацию между документом и различными типами их представления, направляя им команды и получая от них извещения. Представлений документа в приложении может быть несколько. Пользователь взаимодействует с документом посредством его представления.
Фрейм и представление реализованы в виде двух различных оконных классов - класса фрейма и класса представления, при этом окно представления является дочерним по отношению к фрейму, т.е. размещается в его рабочей области. Сам фрейм может быть окном SDI- приложения или дочерним окном MDI-приложения. За взаимодействие пользователя непосредственно с фреймом (изменение размеров, перемещение и т.п.) полностью отвечает сама система Windows. Управление же представлениями ложится на программиста.
Документ представлен в виде объекта, который обеспечивает пространство для хранения данных в памяти и отвечает за такие операции, как запись и чтение документа с файла. Большая часть операций с данными выполняется самим приложением, а не классами библиотеки MFC.
Таким образом, архитектура «документ/представление» охватывает следующие основные классы:
CWinApp - класс для создания единственного объекта - приложения;
CFrameWnd - класс для создания главного окна однодокументного приложения и базовый для классов CMDIFrameWnd и CMDIChildWnd, которые отвечают за работу многодокументного приложения;
СDocTemplate - базовый абстрактный класс для создания шаблонов документов;
CDocument- класс для создания собственно документа;
СView - базовый класс, который совместно со своими производными классами - CCtrlView, CEditView, CListView, CTreeView, CScrollView - отвечает за отображение данных документа и за взаимодействие с пользователем.
При создании MFC AppWizard каркаса приложения архитектуры «Документ/представление» создастся типовой набор классов, производных от вышеназванных классов (если на шаге 1 установить флажок использования архитектуры “Document/View”) (рисунок 1)
Рисунок 1. Классы каркаса приложения архитектуры «Документ/представление»
Созданный каркас приложения достаточно полно реализует функции фрейма, однако функции по описанию данных и их представлению требуется реализовать программисту.
Рассмотрим принципы реализации данных в классе документа. Для реализации документа в типичном приложении необходимо проделать следующие действия.
- Для каждого документа образовать класс на базе CDocument.
- Добавить в него переменные для хранения всех данных документа.
- Реализовать функции для чтения и модификации этих данных.
- Переопределить функцию Cobject::Serialize() в новом классе документа для организации чтения/записи данных документа с диска.
Если используется один класс документа, то он уже создан MFC AppWizard (рисунок 1). Добавление переменных для хранения данных документа рассмотрим для следующего примера. Данными, с которыми работает приложение, будут фамилия, имя, отчество абитуриента и оценки по 3-м дисциплинам - математике, физике и русскому языку. Описать эти данные можно следующей структурой:
typedef struct
{
CString name1;
CString name2;
CString name3;
int mark1;
int mark2;
int mark3;
}
SRTUCTRECORD;
В классе документа эти данные опишем в виде массива, используя шаблон для класса CArray:
class CLb7Doc : public CDocument
{
protected: // create from serialization only
CLb7Doc();
DECLARE_DYNCREATE(CLb7Doc)
// Attributes
public:
CArray <SRTUCTRECORD, SRTUCTRECORD> m_data;
Для занесения и извлечения данных из массива используются методы класса CArray , поэтому здесь не будем использовать собственные методы, тем более, что член класса m_data является открытым.
Для сохранения и чтения из файла данных в документ, а также для создания документа MFC AppWizard реализованы команды ID_FILE_OPEN и ID_FILE_SAVE, ID_FILE_SAVE_AS и ID_FILE_NEW (рисунок 2).
Рисунок 2.- Команды для работы с документом, созданные MFC AppWizard для каркаса приложения архитектуры «Документ/представление»
Для выполнения этих команд библиотекой MFC вызываются соответствующие методы, реализация которых скрыта от программиста. Только два метода могут быть изменены:
- OnNewDocument() - здесь можно произвести инициализацию данных документа для MDI- приложения или очистку данных для SDI-приложения, т.е. уничтожение старых данных. Например, для нашего случая это может быть следующий код
BOOL CLab7Doc::OnNewDocument()
{
// Всю стандартную обработку по созданию документа возлагаем
// на библиотеку MFC
if (!CDocument::OnNewDocument())
return FALSE;
//После успешного создания проводим очистку массива сданными
m_data.RemoveAll();
return TRUE;
}
Метод Serialize() - здесь выполняется, собственно, сохранение данных в файл или чтение из файла данных в структуры документа. Этот метод вызывается при выполнении команд Open, Save или Save As после выбора блоком диалога имени файла.
Метод Serialize называется сериализацией - преобразование в последовательную форму и наоборот, позволяет сохранять и восстанавливать объекты классов, созданных на базе класса CObject. В нашем случае, нужно дополнить этот метод кодом по сохранению и восстановлению данных из файлового бинарного потока (данные записываются в файл без преобразования), который называют архивом. В качестве параметра в этот метод передается указатель на созданный экземпляр класса CArchiv , с которым ассоциирован объект класса CFile. Имя файла подставляется после выполнения кода диалогового окна по выбору имени файла. В классе CArchiv реализованы несколько вариантов перегружаемых операторов >> и << , которые, собственно, загружают объекты (или простые типы) из архива или сохраняют их в архиве. Они имеют следующие однотипные формы:
fried CArchive& operator << (CArchive &ar, CObject *&pOb)
fried CArchive& operator >> (CArchive &ar, CObject *&pOb)
или для простых типов
fried CArchive& operator << (Data_Type& data)
fried CArchive& operator >> (Data_Type& data),
где через Data_Type обозначены примитивные типы данных BYTE, WORD, int, DWORD, float double.
Метод CArchive::IsStoring возвращает направление потока
void CLb7Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
// Работа с потоком выполняется с простыми типами
ar << m_data.GetSize();
for (int i=0; i < m_data.GetSize(); i++)
{
ar << m_data.GetAt(i).name1;
ar << m_data.GetAt(i).name2;
ar << m_data.GetAt(i).name3;
ar << m_data.GetAt(i).mark1;
ar << m_data.GetAt(i).mark2;
ar << m_data.GetAt(i).mark3;
}
}
else
{
// TODO: add loading code here
int size;
SRTUCTRECORD rec;
ar >> size;
m_data.SetSize(size, 1);
for (int i=0; i < size; i++)
{
ar >> rec.name1;
ar >> rec.name2;
ar >> rec.name3;
ar >> rec.mark1;
ar >> rec.mark2;
ar >> rec.mark3;
m_data.SetAt(i,rec);
}
}}
· Задание к лабораторной работе
Создать SDI-приложение для формирования и просмотра данных из файла в соответствии с индивидуальным заданием.
Требования для создаваемого приложения.
Управление заданием имени файла, его открытием или созданием и т.п. выполняется через команды меню или кнопки панели инструментов.
Просмотр загруженных данных из файла, а также формируемых в приложении, данных выполняется в диалоговом окне с использованием элемента управления Listbox. В этом списке отображается либо все данные, либо данные, формируемые в соответствии с функцией, определенной в индивидуальном задании. Порядок вывода управляется с помощью кнопок. Исходно выводится полный список.
Формирование данных в приложении осуществляется в другом диалоговом окне с использованием элементов управления Combobox и Edit.
До задания имени файла элементы меню и соответствующие кнопки управления открытием и сохранением данных в файл должны быть не доступны.
После задания имени файла все команды работы с файлом должны иметь место только для этого файла.
Имя заданного файла должно отображаться в строке статуса.
Список использованной литературы
1. Павловская Т.А., С++ Объектно-ориентированное программирование./ Т.А. Павловская, Ю.А. Щупак. - Спб: Питер, 2004.
2. Карпов Б.В., С++ - специальный справочник./ Б.В. Карпов, Т.С. Баранова - Спб: Питер, 2001.
3. Эккель Б. Философия С++. Практическое программирование./ Б. Эккель, Ч. Эллисон - СПб: Питер, 2004.
4. Страуструп Б., Язык программирования С++. / Б. Страуструп. - СПб: Питер, 2005.
5. Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы ООП. С++. Лабораторный практикум для студентов всех специальностей и форм обучения БГУИР. - Минск: БГУИР, 2005.
6. Константайн Л., Локвуд Л. Разработка программного обеспечения. _ М.: Питер, 2004.
7. Савич В. C++ во всей полноте. - М.: Питер, 2004.
8. Аллен Э. Типичные ошибки проектирования. - М. : Питер, 2003.
9. Пол И. Объектно-ориентированное программирование с использованием C++. _ Киев.: ДиаСофт, 2005.
10. Винниченко И.В. Автоматизация процессов тестирования. - М.: Питер, 2005.
11. Богуславский А.С. Си ++ и компьютерная графика. Лекции и практикум по программированию на Си ++. -М.: Компьютер Пресс, 2003.
Св. план 2011, поз.
Учебное издание
Снисаренко Светлана Валерьевна
Стасевич Наталья Александровна
Капанов Николай Анатольевич
технология разработки программного обеспечения систем управления.
Лабораторный практикум для студентов специальности 1-53.01.07 «Информационные технологии и управление в технических системах» вечерней и заочной форм обучения.
Редактор
Корректор
Компьютерная верстка
Подписано в печать
Формат 60ґ84 1/16.
Бумага офсетная.
Гарнитура «Таймс».
Печать ризографическая.
Усл. печ. л.
Уч.-изд. л. 2,0.
Тираж экз. Заказ
Издатель и полиграфическое исполнение:
Учреждение образования
«Белорусский государственный университет информатики и радиоэлектроники»
ЛИ №02330/0056964 от 01.04.2004. ЛП №02330/0131666 от 30.04.2004.
220013, Минск, П. Бровки, 6.
Размещено на Allbest.ru
Размещено на Allbest.ru
Подобные документы
Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.
контрольная работа [60,1 K], добавлен 17.01.2011Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам.
курсовая работа [782,4 K], добавлен 26.05.2014Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.
курсовая работа [275,9 K], добавлен 22.12.2011Концепция объектно-ориентированного программирования. Объектно-ориентированные языки программирования: Smalltalk, Object Pascal, CLOS и C++. Понятие "Объект" и "Класс". Управление доступом к элементам данных классов. Определение функций-членов класса.
реферат [24,5 K], добавлен 28.10.2011Характеристика объектно-ориентированного, процедурного, функционального программирования. Выбор языка программирования для создания программного обеспечения для управления справочником "Спортсмены". Алгоритм работы приложения, пользовательский интерфейс.
курсовая работа [1,6 M], добавлен 23.02.2016Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.
учебное пособие [1,6 M], добавлен 28.12.2013Использование скриптового языка программирования для разработки web-приложений (сценариев). Изучение основ объектно-ориентированного программирования в языке PHP. Ознакомление со специальными методами для работы с классами. Назначение интерфейсов.
контрольная работа [25,1 K], добавлен 14.03.2015Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.
контрольная работа [51,7 K], добавлен 22.01.2013Анализ методов объектно-ориентированного программирования на примере численных. Детальная характеристика модулей и связь их в одну общую программу. Принципы интегрирования по общей формуле трапеции и решение дифференциального уравнения методом Эйлера.
курсовая работа [511,6 K], добавлен 25.03.2015Характеристика основных принципов объектно-ориентированного программирования. Этапы разработки программы на языке C++, реализующей игру "Морской бой". Выбор языка программирования. Характеристика необходимых классов, наследований, виртуальных методов.
курсовая работа [657,6 K], добавлен 17.06.2012