3 Протоколы спроектированных классов
В разделе 2 данной курсовой работы был приведен объектно-ориентированный анализ предметной области, в процессе которого были выделены основные сущности предметной области. Такими сущностями являются конвейер, очередь, настройщик, телевизор, контроллер. Каждая из этих сущностей представляет класс объектов.
3.1 Протокол класса TV.
class TV
{
private:
float tv_generation_next_time;
public:
TVGenerator ();
void Process (Queue& queue1, Queue& queue2);
float frand (float a, float b);
};
3.2 Протокол класса Контроллер.
class Controler
{
private:
float TV_next_time;
public:
Controler ();
void Process (Queue& q,Queue& q_ad);
void Delay (float dt);
float frand (float a, float b);
};
3.3 Протокол класса Настройщик.
class Adjuster
{
private:
float TV_next_time;
public:
Adjuster ();
void Process (Queue& q_ad);
};
3.4 Протокол класса Очередь.
class Queue
{
private:
size_t TV_count;
size_t id;
public:
Queue (size_t);
size_t Id () { return id; }
void AddTV ();
void RemoveTV ();
void RemoveTVAd ();
bool IsFull () { return TV_count == MAX_TV_ON_CONTROLER; }
bool IsEmpty () { return TV_count == 0; }
};
3.5 Протокол класса Конвейер.
class Conveyor
{
private:
TV tv_generator;
Queue queue1;
Queue queue2;
Queue queue3;
Controler controler1;
Controler controler2;
Adjuster adjuster1;
public:
Conveyor();
void Process ();
};
4 Объектно-ориентированная реализация
4.1 Постановка задачи разработки программного продукта
На основе анализа предметной области необходимо спроектировать протоколы классов сущностей, выделенных во время анализа, реализовать и на их основе спроектировать и реализовать программу, имитирующую работу объекта реального мира производственной линии с пунктами технического контроля.
4.2 Структура программного продукта
Объектом автоматизации является функционирование производственной линии с пунктами технического контроля, а так же вывод результатов проектирования.
Проект состоит из двух основных частей:
-
моделирование работы;
-
вывод результатов.
4.3 Описание структур данных
Входными данными для разработанного ПП являются параметры производственной линии: время моделирования и шаг времени.
Выходными данными являются история динамики телевизоров на производственной линии, загруженность контролера и настройщика.
ВЫВОДЫ
В ходе выполнения курсовой работы был проведен объектно-ориентированный анализ предметной области, в ходе которого были выделены основные сущности. На основе выделенных сущностей были спроектированы и реализованы классы.
Для написания данного проекта был выбран объектно-ориентированный подход. В нем собраны лучшие идеи, воплощенные в структурном программировании и сочетает их с мощными новыми концепциями, которые позволяют оптимально организовать программы.
После тестирования программного продукта сделано заключение, что программный продукт в целом удовлетворяет требованиям, предъявленным в техническом задании.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
-
Б. Страуструп. Язык программирования С++. - М.: Издательский дом «Вильямс», 2005г., с. 369
-
С. Мейерс. Эффективное использование STL. - С – Пб.: «Питер», 2002г., с. 167
-
Г. Шилдт. Справочник программиста С/С++. 3-е издание. – С - Пб.:
БВХ-Петербург, 2003. ¬– 688 с.
-
Г.Буч. Объектно-ориентированный анализ.
Приложение А
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
А.1 Общие сведения
Тема курсового проекта «Объектно-ориентированная разработка систем имитационного моделирования. Производственная линия с пунктами технического контроля».
Система проектируется студентом 1-го курса Государственного университета информатики и искусственного интеллекта (ГУИиИИ), факультет СКИТ, группа ПО-07д Шелюк А.Е.
Основанием для разработки программного продукта является задание, выданное кафедрой ПОИС. Плановый срок начала работы по созданию информационной системы: 09.02.08., срок окончания: 22.05.2008г. Курсовая работа должна выполняться согласно графику, приведенному в таблице А.1.
Таблица А.1 – Стадии и этапы разработки программного продукта
№ |
Этапы работы |
Сроки выполнения |
1. |
Получение задания |
09.02.08 |
2. |
Объектно-ориентированный анализ пр. области |
20. 02.08 |
3. |
Составление технического задания |
12.03.08 |
4. |
Построение диаграмм классов, конечных автоматов |
22.03.08 |
5. |
Построение диаграмм вариантов использования, взаимодействия ,объектов и пакетов |
12.04.08 |
6. |
Проектирование протоколов классов |
20.04.08 |
7. |
Проектирование программы |
27.04.08 |
8. |
Отладка программы на верхнем уровне |
5.05.08 |
9. |
Тестирование программы |
10.05.08 |
10. |
Написание пояснительной записки |
18.05.08 |
11. |
Защита курсового проекта |
22.05.08 |
А.2 Назначения и цели создания программы
Данный ПП предназначен для имитации работы динамического объекта реального мира производственной линии с пунктами конечного контроля и получения характеристик его функционирования в различных условиях:
время между поступлениями телевизоров в пункт контроля для заключительной проверки распределено равномерно на интервале 3.5-7.5 мин. В пункте заключительной проверки параллельно работают два контролера. Время, необходимое на проверку одного телевизора, распределено равномерно на интервале 6-12 мин. В среднем 85% телевизоров проходят проверку успешно с первого предъявления и направляются на упаковку. Остальные 15% возвращаются в пункт настройки, обслуживаемый одним рабочим. Время настройки распределено равномерно на интервале 20-40 мин.
А.3 Характеристика объекта автоматизации
Собранные телевизоры на заключительной стадии их производства проходят ряд пунктов технического контроля. В последнем из этих пунктов осуществляется проверка настройки телевизоров. Если при проверке обнаружилось, что телевизор работает некачественно, он направляется в пункт настройки, где настраивается заново. После перенастройки телевизор снова направляется в последний пункт контроля для проверки качества настройки. Телевизоры, которые сразу или после нескольких возвратов в пункт настройки прошли фазу заключительной проверки, направляются в цех упаковки.
А.4 Требования к программному продукту
А.4.1 Требования к системе в целом
В целом к системе предъявляются следующие требования:
- провести объектно-ориентированный анализ заданной предметной области.
- результат анализа представить в виде словаря предметной области.
- провести объектно-ориентированное проектирование.
- необходимо ответить на следующие вопросы:
какие классы и объекты Вы предлагаете ввести, чему они
соответствуют в моделируемой предметной области;
что является "состоянием" для объектов этих классов, набором каких
параметров оно задается;
какие сообщения должны принимать и обрабатывать объекты;
какие информационные зависимости существуют между классами,
какими общими функциями они пользуются.
- результат проектирования представить в виде диаграмм классов,
конечных автоматов, вариантов использования, взаимодействия,
объектов и пакетов.
- использовать нотацию Буча или UML.
- провести объектно-ориентированное программирование.
- на основе результата объектно-ориентированного проектирования создать протоколы классов.
А.4.2 Требования к задачам и функциям, выполняемым ПП
В процессе работы Необходимо промоделировать работу пунктов контроля и настройки в течение заданного времени для оценки следующих параметров:
-
время, затрачиваемое на обслуживание каждого телевизора на последнем этапе производства;
-
загрузка контролеров;
-
загрузка настройщика.
А.4.3 Требования к техническому обеспечению
Требования:
- использовать IBM- совместимые ЭВМ с учетом необходимых ресурсов машины для функционирования проектируемого программного продукта;
- обеспечить достаточный объем внешней памяти для возможности работы с необходимым объемом информации;
А.4.4 Требования к программному обеспечению
ПП должен функционировать в условиях ОС MS-DOS.
К программному обеспечению предъявляются следующие требования:
- использование удобного и понятного пользовательского интерфейса.
В программную документацию должны входить:
-
пояснительная записка;
-
приложения:
а) техническое задание;
б) листинг программы.
Приложение Б
ЛИСТИНГ ПРОГРАММЫ
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
using namespace std;
size_t MAX_TV_ON_CONTROLER; // макс. количество телевизоров
//в очереди у контролера
float TIME_STEP; // шаг времени
float MODELING_TIME; // время моделирования
size_t tested_time=0; // время работы настройщика
size_t servicecon_time=0; //время работы, двух контролеров
float current_time = 0;
float get_current_time () //текущее время
{
return current_time;
}
float frand (float a, float b) // функция генерирующая числа
{ // на определенномпромежутке
return float (rand ()) / RAND_MAX * (b-a) + a;
}
class Queue
{
public:
Queue (size_t in_id) : id (in_id)
{
TV_count = 0;
}
size_t Id () { return id; }
void AddTV ()
{
if (TV_count == MAX_TV_ON_CONTROLER)
return;
printf ("%.1f: TV on controler\n", get_current_time (), id);
TV_count++;
}
void RemoveTV ()
{
if (!TV_count)
return;
printf ("%.1f: TV already work \n", get_current_time (), id);
TV_count--;
}
void RemoveTVAd ()
{
if (!TV_count)
return;
TV_count--;
}
bool IsFull () { return TV_count == MAX_TV_ON_CONTROLER; }
bool IsEmpty () { return TV_count == 0; }
private:
size_t TV_count;
size_t id;
};
class TV
{
public:
TV ()
{
tv_generation_next_time = 0;
}
void Process (Queue& queue1, Queue& queue2)
{
if (get_current_time () < tv_generation_next_time)
return;
Queue* q;
Queue* q1;
q = &queue1;
q1 = &queue2;
if (!q->IsFull())
q->AddTV();
else if (!q1->IsFull())
q1->AddTV();
tv_generation_next_time = get_current_time () + frand (3.5, 7.5);
}
private:
float tv_generation_next_time;
};
class Controler
{
public:
Controler () {TV_next_time = 0; }
void Process (Queue& q,Queue& q_ad)
{
if (get_current_time () < TV_next_time)
return;
q.RemoveTV ();
if (frand(0, 100)<15)
{
printf ("%.1f:TV is unwork\n", get_current_time ());
q.RemoveTVAd ();
q_ad.AddTV();
}
else
q.AddTV();
float c=frand (6, 12);
TV_next_time = get_current_time () + c;
servicecon_time+=c;
}
void Delay (float dt)
{
TV_next_time = get_current_time () + dt;
}
private:
float TV_next_time;
};
class Adjuster
{
public:
Adjuster () {TV_next_time = 0; }
void Process (Queue& q_ad)
{
if (get_current_time () < TV_next_time)
return;
else
{
cout<<"TV was checking"<<" "<<get_current_time ()<<endl;
}
q_ad.RemoveTVAd();
float C=frand(20,40);
TV_next_time = get_current_time () + C;
tested_time+=C;
}
private:
float TV_next_time;
};
class Conveyor
{
public:
Conveyor() : queue1 (1), queue2 (2), queue3 (3)
{
}
void Process ()
{
tv_generator.Process (queue1, queue2);
controler1.Process (queue1,queue3);
controler2.Process (queue2,queue3);
adjuster1.Process(queue3);
}
private:
TV tv_generator;
Queue queue1;
Queue queue2;
Queue queue3;
Controler controler1;
Controler controler2;
Adjuster adjuster1;
};
void clear()
{
cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
}
int main ()
{
int ch;
do
{
cout<<" Simulation of conveyor\n\n";
cout<<" [1]- Start modeling\n";
cout<<" [Esc]-Exit\n\n";
ch=getch();
switch(ch)
{
case '1':
{//clear();
cout<<"Simulation of conveyor\n\n";
cout<<"Enter the step of time: ";
cin>>TIME_STEP;
if(TIME_STEP<=1||TIME_STEP>2) TIME_STEP=0.3;
cout<<"Enter the modelling time: ";
cin>>MODELING_TIME;
if(MODELING_TIME<=1||MODELING_TIME>1500) MODELING_TIME=1000;
cout<<"Enter the size of controller queue: ";
cin>>MAX_TV_ON_CONTROLER;
if(MAX_TV_ON_CONTROLER<=1||MAX_TV_ON_CONTROLER>15) MAX_TV_ON_CONTROLER=5;
Conveyor conveyor1;
while (get_current_time () < MODELING_TIME)
{
conveyor1.Process ();
current_time += TIME_STEP;
}
cout<<"\n\n\n";
cout<<"loading of controller = "<<(((servicecon_time)*100)/(2*get_current_time()))<<"%"<<endl;
cout<<"loading of adjuster = "<<((tested_time*100)/get_current_time())<<"%"<<endl;
cout<<"End of simulation\n";
break;
}
case 27:
return 0;
}
}while(1);
getch();
return 0;
}
Приложение В
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Программа предназначена для моделирования производственной линии с пунктами конечного контроля. Основная задача моделирования - это проследить загруженность контролера и настройщика.
В начале программы спросит у вас о том, что вы желаете сделать. Затем ввести значение шага времени и время моделирования системы, а так же максимальное количество телевизоров в очереди к контролерам. Во время моделирования на экран вводятся все детали моделирования производственной линии.
В конце будут выведены на экран требуемые характеристики, которые и являются целью моделирования системы:
-
время, затрачиваемое на обслуживание каждого телевизора на последнем этапе производства;
-
загрузка контролеров;
-
загрузка настройщика;
После выполнения работы, программа снова предложит вам промоделировать производственную линию. Так же предложит вам выйти из программы.