Вы находитесь на странице: 1из 19

Министерство образования Республики Беларусь

Учреждение образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Факультет информационных технологий и управления


Кафедра информационных технологий автоматизированных систем

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к расчётной работе
по курсу «Объектно-ориентированное программирование и проектирование»
на тему «Объектно-ориентированный анализ и проектирование
программного обеспечения. Венгерский метод»

Выполнил студент гр. № 920603 _____________ А.В.Сироткин


(подпись)

Руководитель _____________ М.П. Ревотюк


(подпись)

Минск 2012
СОДЕРЖАНИЕ
ВВЕДЕНИЕ................................................................................................................................................2
1 ПОСТАНОВКА ЗАДАЧИ.....................................................................................................................6
1.1 Функциональные требования к системе............................................................................................6
1.2 Глоссарий проекта...............................................................................................................................6
2 РАЗРАБОТКА СИСТЕМЫ ИНТЕРАКТИВНОГО РЕШЕНИЯ ЗАДАЧ О НАЗНАЧЕНИИ
ВЕНГЕРСКИМ МЕТОДОМ.....................................................................................................................8
2.1 Моделирование бизнес-процессов.....................................................................................................8
2.2 Модификация модели вариантов использования..............................................................................9
2.3 Создание диаграммы классов...........................................................................................................10
2.4 Создание диаграммы взаимодействия.............................................................................................11
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ...............................................................................14

2
ВВЕДЕНИЕ

Унифицированный язык моделирования UML (Unified Modeling


Language) – это преемник того поколения методов объектно-
ориентированного анализа и проектирования, которые появились в конце
80-х и начале 90-х годов. UML находится в процессе стандартизации,
проводимом консорциумом OMG (Object Management Group), в настоящее
время он принят в качестве стандартного языка моделирования и получил
широкую поддержку. UML принят на вооружение практически всеми
крупнейшими компаниями – производителями программного обеспечения
(Microsoft, IBM, Hewlett-Packard, Oracle, Sybase и др.). Кроме того,
практически все мировые производители CASE-средств, помимо Rational
Software (Rational Rose), поддерживают UML в своих продуктах (Paradigm
Plus (CA), System Architect (Popkin Software), Microsoft Visual Modeler и др.
Создатели UML представляют его как язык для определения,
представления, проектирования и документирования программных систем,
организационно-экономических систем, технических систем и других систем
различной природы. UML содержит стандартный набор диаграмм и нотаций
самых разнообразных видов. Стандарт UML версии 1.1, принятый OMG в
1997 г., предлагает следующий набор диаграмм для моделирования:
1 диаграммы вариантов использования (use case diagrams) – для
моделирования бизнес-процессов организации и требований к создаваемой
системе);
2 диаграммы классов (class diagrams) – для моделирования
статической структуры классов системы и связей между ними;
3 диаграммы поведения системы (behavior diagrams):
3.1 диаграммы взаимодействия (interaction diagrams):
3.1.1 диаграммы последовательности (sequence diagrams);
3.1.2 кооперативные диаграммы (collaboration diagrams) – для

3
моделирования процесса обмена сообщениями между
объектами;
3.2 диаграммы состояний (statechart diagrams) – для
моделирования поведения объектов системы при переходе из одного
состояния в другое;
3.3 диаграммы деятельностей (activity diagrams) – для
моделирования поведения системы в рамках различных вариантов
использования, или моделирования деятельностей;
4 диаграммы реализации (implementation diagrams):
4.1 диаграммы компонентов (component diagrams) – для
моделирования иерархии компонентов (подсистем) системы;
4.2 диаграммы размещения (deployment diagrams) – для
моделирования физической архитектуры системы.
Вариант использования (use case) представляет собой
последовательность действий (транзакций), выполняемых системой в ответ
на событие, инициируемое некоторым внешним объектом (действующим
лицом). Вариант использования описывает типичное взаимодействие между
пользователем и системой. В простейшем случае вариант использования
определяется в процессе обсуждения с пользователем тех функций, которые
он хотел бы реализовать.
Действующее лицо (actor) – это роль, которую пользователь играет
по отношению к системе. Действующие лица представляют собой роли, а не
конкретных людей или наименования работ. Несмотря на то, что на
диаграммах вариантов использования они изображаются в виде
стилизованных человеческих фигурок, действующее лицо может также быть
внешней системой, которой необходима некоторая информация от данной
системы. Показывать на диаграмме действующих лиц следует только в том
случае, когда им действительно необходимы некоторые варианты
использования.

4
Действующие лица делятся на три основных типа – пользователи
системы, другие системы, взаимодействующие с данной, и время. Время
становится действующим лицом, если от него зависит запуск каких-либо
событий в системе. Для наглядного представления вариантов использования
в качестве основных элементов процесса разработки программного
обеспечения (ПО), для моделирования бизнес-процессов организации и
требований к создаваемой системе применяются диаграммы вариантов
использования (use case diagrams). На диаграмме вариантов использования
показано взаимодействие между вариантами использования и действующими
лицами. Она отражает требования к системе с точки зрения пользователя.
Таким образом, варианты использования – это функции, выполняемые
системой, а действующие лица – это заинтересованные лица по отношению к
создаваемой системе. Такие диаграммы показывают, какие действующие
лица инициируют варианты использования. Из них также видно, когда
действующее лицо получает информацию от варианта использования.
Класс – определяет интерфейс и реализацию объекта. Описывает
внутреннее представление и операции, которые объект может выполнять.
Стереотипы – это механизм, позволяющий разделять классы на
категории. В языке UML (Unified Modeling Language) определены три
основных стереотипа классов: Boundary (граница), Entity (сущность) и
Control (управление).
В потоках событий варианта использования выявляются классы трех
типов:
 Граничные классы (Boundary) – служат посредниками при
взаимодействии внешних объектов с системой. Как правило, для каждой
пары «действующее лицо - вариант использования» определяется один
граничный класс. Типы граничных классов: пользовательский интерфейс
(обмен информацией с пользователем, без деталей интерфейса - кнопок,

5
списков, окон), системный интерфейс и аппаратный интерфейс
(используемые протоколы, без деталей их реализации).
 Классы-сущности (Entity) – представляют собой ключевые
абстракции (понятия) разрабатываемой системы. Источники выявления
классов-сущностей: ключевые абстракции, созданные в процессе
архитектурного анализа, глоссарий, описание потоков событий вариантов
использования.
 Управляющие классы (Control) – обеспечивают координацию
поведения объектов в системе. Могут отсутствовать в некоторых
вариантах использования, ограничивающихся простыми манипуляциями с
хранимыми данными. Как правило, для каждого варианта использования
определяется один управляющий класс. Примеры управляющих классов:
менеджер транзакций, координатор ресурсов, обработчик ошибок.
Rational Rose – семейство объектно-ориентированных CASE-средств
фирмы Rational Software Corporation – предназначено для автоматизации
процессов анализа и проектирования ПО, а также для генерации кодов на
различных языках и выпуска проектной документации. Rational Rose
использует метод объектно-ориентированного анализа и проектирования,
основанный на языке UML.
В результате разработки проекта с помощью CASE-средства Rational
Rose формируются следующие документы:
 диаграммы UML, в совокупности представляющие собой модель
разрабатываемой программной системы;
 спецификации классов, объектов, атрибутов и операций;
 заготовки текстов программ.

6
1 ПОСТАНОВКА ЗАДАЧИ

1.1 Функциональные требования к системе

Представить модуль интерактивного решения задач о назначении


венгерским методом с возможностью работы в демонстрационном и
тестовом режимах.

1.2 Глоссарий проекта

Система Программная система интерактивного решения


задач о назначении венгерским методом
Пользователь Человек, работающий с системой

Венгерский алгоритм — алгоритм оптимизации, решающий задачу о


назначениях за полиномиальное время. Он был разработан и опубликован
Харолдом Куном в 1955 году. Автор дал ему имя «венгерский метод» в связи
с тем, что алгоритм в значительной степени основан на более ранних работах
двух венгерских математиков (Кёнига и Эгервари).

7
2 РАЗРАБОТКА СИСТЕМЫ ИНТЕРАКТИВНОГО
РЕШЕНИЯ ЗАДАЧ О НАЗНАЧЕНИИ ВЕНГЕРСКИМ
МЕТОДОМ

2.1 Моделирование бизнес-процессов

Были выбраны следующие актеры (business actors) и варианты


использования (business use case):
Актёры:
Пользователь – человек, работающий с системой. Этот актер
инициирует все прецеденты.
Варианты использования:
- Ввод данных
- Выбор режима работы
Диаграмма вариантов использования приведена на рисунке 1.

Рисунок 1 – Диаграмма вариантов использования для системы


интерактивного решения задач о назначении венгерским методом

8
2.2 Модификация модели вариантов использования

В состав системы интерактивного решения задач о назначении


венгерским методом следует ввести изменения в описание вариантов
использования.
Варианты использования:
 ввод данных о работниках;
 изменение данных;
 выбор режима работы;
 изменение режима работы;
 запуск работы.
Модифицированная диаграмма вариантов использования для системы
интерактивного решения задач о назначении венгерским методом
изображена на рисунке 2.

Рисунок 2 – Модифицированная диаграмма вариантов


использования

9
2.3 Создание диаграммы классов

Для реализации системы интерактивного решения задач о назначении


венгерским методом необходимо создать один класс:
 Veng – управляющий класс.
Диаграмма классов VOPC с атрибутами и классами приведена на
рисунке 3.

Рисунок 3 – Диаграмма класса VOPC

10
2.4 Создание диаграммы взаимодействия

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


интерактивного решения задач о назначении венгерским методом.
Диаграмма последовательности Работы с системой представлена на
рисунке 4.

Рисунок 4 – Диаграмма последовательности работы с системой

С помощью диаграммы последовательности Работы с системой


создадим кооперативную диаграмму. Данная диаграмма приведена на
рисунке 5.

11
Рисунок 5 – Кооперативная диаграмма работы с системой

12
ЗАКЛЮЧЕНИЕ
В результате выполнения расчётной работы разработана система
интерактивного решения задач о назначении венгерским методом. Созданы
действующие лица, а также варианты использования, описывающие
взаимодействие между действующими лицами и системой. Созданы
диаграмма вариантов использования, диаграмма классов, диаграмма
последовательности и кооперативные диаграммы.

13
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

[1] Вендров А.М., Малышко В.В. Объектно-ориентированный анализ


и проектирование с использованием языка UML. М.: Издательский отдел
факультета ВМиК МГУ, 2002. – 54 с.
[2] Ларман К. Применение UML и шаблонов проектирования.:
Издательский дом «Вильямс», 2004. – 619 с.
[3] Кватрани Т. Rational Rose 2000 и UML. Визуальное
моделирование.: Издательство ДМК, 2001. – 175 с.

14
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <vector>
#include <string>

using namespace std;

class Veng
{
const static int INF = 999999;
private:
int count;
int** work;
int* ans;
int cost;
bool isTest;

public :
Veng();
void start();
void createData();
void changeData();
void changeMode();
void show();
void getData();
void getMode();
int choose(string action);
~Veng();
};

Veng::Veng()
{
ans = NULL;
createData();

void Veng::createData()
{
count = choose("Insert count workers :\n ");

work = new int*[count + 1];


for (int i = 0; i <= count; i++)
work[i] = new int[count + 1];

work[0][0] = 0;

for (int i = 1; i <= count ; i++)


{
work[0][i] = 0;
work[i][0] = 0;

cout << "Enter " << i << " stats\n";

for (int j = 1; j <= count; j++)


{
char* word = new char[5];
string query = itoa(j,word,10);
query += " job : ";

15
work[i][j] = choose(query);
delete word;

}
}
system("cls");
}

void Veng::changeData()
{
if (work != NULL)
{
for (int i = 0; i <= count; i++)
delete work[i];
delete work;
work = NULL;
createData();
} else
{
createData();
}
}

void Veng::changeMode()
{
int i = 0;
while (i < 1 || i > 2)
{
i = choose("Choose mode :\n 1. Demostrative mode\n 2. Test mode\n");
}
isTest = i - 1;
}

void Veng::start()
{
if (ans != NULL)
delete ans;

int* u = new int[count + 1];


int *v = new int[count + 1];
int *p = new int[count + 1];
int* path = new int[count + 1];

for (int i = 0 ; i <= count ; i++ )


{
p[i]=0;
path[i]=0;
v[i]=0;
u[i]=0;
}

for (int i = 1; i <= count; i++)


{
int* minv = new int[count + 1];
bool* used = new bool[count + 1];
for (int i = 0 ; i <= count ; i++ )
{
minv[i] = INF;
used[i] = false;
}

p[0] = i;

16
int col = 0;
do
{
used[col] = true;
int row = p[col];
int delta = INF;
int col1 = 0;
for (int j = 1; j <= count; j++)
{
if (!used[j])
{
int cur = work[row][j] - u[row] - v[j];

if (cur < minv[j])


{
minv[j] = cur;
path[j] = col;
}

if (minv[j] < delta)


{
delta = minv[j];
col1 = j;
}
}
}

for (int j = 0; j <= count; j++)


{
if (used[j])
{
u[p[j]] += delta;
v[j] -= delta;
} else
{
minv[j] -= delta;
}
}

col = col1;
} while (p[col] != 0);

do
{
int col1 =path[col];
p[col] = p[col1];
col = col1;
} while (col);

if (!isTest)
for ( int j = 1; j <= count; j++)
{
cout << " " << j << " - " << p[j] << endl;
}
delete used;
delete minv;
}

ans = new int[count + 1];


for (int i = 1; i <= count; i++)
{
ans[p[i]] = i;
}

17
cost = -v[0];

delete u;
delete p;
delete v;
delete path;

void Veng::show()
{
cout << "\nAnswer:\n";
for (int i = 1; i <= count; i++)
{
cout << setw(10) << i << " do " << ans[i] << endl;

}
cout << "cost = " << cost << endl;
}

int Veng::choose(string action)


{
int n;
for ( ; ; )
{
//system("cls");
cout << action;
cin >> n;
if (cin.good())
{
if ( n > 0 )
{
break;
}
} else
{
cin.clear();
_flushall();
}
}
return n;
}

void Veng::getData()
{
cout << " ";
for (int j = 1; j <= count; j++)
cout << setw(3) << j;
cout << "\n\n";

for (int i = 1; i <= count; i++)


{
cout << i;
for (int j = 1; j <= count; j++)
{
cout << setw(3) << work[i][j];
}
cout << endl << endl;
}
}

void Veng::getMode()

18
{
if (isTest)
cout << "Test Mode\n";
else
cout << "Demonstrative mode\n";
}

Veng::~Veng()
{
delete ans;
for (int i = 0; i <= count; i++)
delete work[i];
delete work;

int main()
{
Veng* veng = new Veng();
system("cls");
veng->changeMode();
for ( ; ; )
{
int i = 0;
while (i > 7 || i < 1)
i = veng->choose("1. Create Data\n2. Change Data\n3. Show Data\n4.
Change Mode\n5. Show Mode\n6. Start \n7.Quit\n");
system("cls");
switch(i)
{
case 1:
veng->createData();
break;
case 2:
veng->changeData();
break;
case 3:
veng->getData();
break;
case 4:
veng->changeMode();
break;
case 5:
veng->getMode();
break;
case 6:
veng->start();
veng->show();
break;
case 7:
veng->~Veng();
exit(1);
break;
}
}

return 0;
}

19