Технология разработки программного обеспечения систем управления

Объект и класс как основа объектно-ориентированного языка программирования. Методология построения и использования принципов объектно-ориентированного программирования и программирования под 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.