Файл: Применение объектно-ориентированного подхода при проектировании информационной системы ( Краткая характеристика проектируемой системы).pdf
Добавлен: 03.07.2023
Просмотров: 69
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Краткая характеристика проектируемой системы
1.1 Постановка задачи и краткое описание системы
1.4 Описание и разработка классов входящих в систему
Глава 2. Разработка UML модели
2.1 Краткое описание, назначение и предметы UML языка
2.4 Формирование UML диаграммы классов
2.6 Дополнительные диаграммы, отображающие особенности программы
Диаграмма последовательности представляет собои? взаимодействие - огромное количество сообщений меж объектами, упорядоченное по временнои? оси. В отличие от диаграммы кооперации, на диаграмме последовательности изображены временные последовательности сообщений, но не дела меж объектами. Диаграмма последовательности может существовать в форме дескриптора (обрисовывать все вероятные сценарии) либо же в форме экземпляра (обрисовывать один определенный сценарий). Диаграммы последовательности и диаграммы кооперации отражают, на самом деле, одну и ту же информацию, но делают это разным образом.
Каждый объект изображается в виде отдельнои? вертикальнои? колонки. Знак объекта (прямоугольник, снутри которого размещается подчеркнутое имя объекта) помещается сверху колонки, у конца стрелки-сообщения, которое этот объект делает. Если объект существовал еще до первои? операции, изображеннои? на диаграмме, знак объекта изображается в высшей части диаграммы, до всяких сообщений. От него идет пунктирная линия, которая прерываемся в тои? точке, где объект прекращает свое свое существование (опять-таки, если этот момент описывается диаграммои?). Эта линия именуется линией жизни. Точка, в которои? объект прекращает свое существование, отмечается огромным крестом (X), стоящим или у хвоста стрелки, обозначающей сообщение, которое вызывает ликвидирование объекта, или в тои? точке, где объект уничтожает себя сам. Период активности объекта изображается в виде двои?нои? непрерывнои? черты. К такому периоду относится всегда жизни активного объекта либо активация пассивного объекта, - другими словами время, в течение которого производится операция данного объекта (куда врубается также время, затраченное операцией на ожидание возврата из вызванных 100 операций). Если объект вызывает себя рекурсивным образом, прямо либо косвенно, то около первои? двои?нои? непрерывнои? полосы помещается вточности такая же 2-ая. Так изображается двои?ная активация. Порядок расположения объектов не имеет особенного значения, хотя, исходя из убеждений удобства, лучше очень уменьшить расстояние меж линиями жизни, через которое должны проходить стрелки-сообщения. Комментарий относительно активации можно расположить прямо около нее.
Каждое сообщение смотрится как горизонтальная стрелка, идущая от полосы жизни того объекта, который посылает сообщение, к полосы жизни объекта, который его получает. На уровне стрелки на полях можно поместить метку, в которои? будет обозначено время отправки сообщения. В почти всех моделях сообщения принято считать моментальными либо, по последней мере, атомарными. Если сообщению требуется некое время для того, чтоб дои?ти до адресата, то стрелка сообщения изображается с наклоном вниз - это обозначает, что получение сообщения происходит с задержкои?. При всем этом у обоих концов стрелки могут размещаться метки с указанием времени отправки и получения сообщения.
Чтоб показать асинхронный поток управления меж активными объектами, эти объекты изображаются в виде двои?ных непрерывных линий, а сообщения - в виде стрелок. Можно отправить два сообщения сразу, но при всем этом их нельзя сразу получить - одновременное получение сообщений просто нереально гарантировать.
ия это - описание последовательности действий, которые может производить система в ответ на наружные воздействия юзеров либо других программных систем. Варианты использования отражают функциональность системы исходя из убеждений получения важного результата для юзера, потому они поточнее позволяют ранжировать функции по значимости получаемого результата.
Варианты использования предусмотрены сначала для определения многофункциональных требований к системе и управляют всем процессом разработки. Все главные виды деятельности, такие как анализ, проектирование, тестирование производятся на базе вариантов использования. Во время анализа и проектирования варианты использования позволяют осознать как результаты, которые желает получить юзер, оказывают влияние на архитектуру системы и как должны себя вести составляющие системы, для того чтоб воплотить подходящую для юзера функциональность.
В процессе тестирования, описанные ранее варианты использования, позволяют проще оценить точность реализации требований юзеров и позволяют провести пошаговую проверку этих требований.
Стратегия использования прецедентов при определении требований определяет необходимость дополнительно к вопросу "что юзеры ожидают от системы?" задавать вопрос "что система должна сделать для определенного юзера?". Таковой подход позволяет находить функции, которые необходимы многим юзерам, и исключать те способности, которые не могут посодействовать юзерам делать свои ежедневные задачки.
Диаграмма вариантов использования состоит из актеров, для которых система производит действие и фактически деяния Use Case, которое обрисовывает то, что актер желает получить от системы. Актер обозначается значком человечка, а Use Case - овалом. Дополнительно в диаграммы могут быть добавлены комменты. Use Case диаграмма для разрабатываемой системы изображена в приложении В.
Заключение
В проведенной курсовой работе была создана объектно-ориентированная программная система авто-навигатор машины, который выбирает оптимальный ражим работы двигателя автомобиля, то есть число оборотов, расход топлива и т.д.
Проектирование информационных систем весьма трудоемкая задача, требующая времени и высокой квалификации участвующих в ней специалистов. За время существования программной инженерии появилось несколько подходов к проектированию ИС, каждый из которых обладает своими преимуществами и недостатками.
В соответствии с различными представлениями об организации методики проектирования ИС принято делить на объектные и функциональные (структурные).
Объектно-ориентированные технологии развивались в различных областях вычислительной техники как средство решения проблем, связанных со сложностью создаваемых систем. В основе объектно-ориентированного проектирования лежит представление о том, что программную систему необходимо проектировать как совокупность взаимодействующих друг с другом объектов, рассматривая каждый объект как экземпляр определенного класса, классы образуют иерархию.
Существует множество технологий и инструментальных средств, с по-мощью которых можно реализовать оптимальный проект ИС, начиная с этапа анализа и заканчивая созданием программного кода системы. Наибольшую популярность в создании проектов ИС, основанных на объектно-ориентированном подходе, получило моделирование с помощью UML.
Унифицированный язык моделирования UML (Unified Modeling Language) представляет собой язык для определения, представления, проектирования и документирования программных средств, организационно-экономических, технических систем и других систем различной природы.
С помощью UML можно разработать модель создаваемой системы, которая отображает не только ее концептуальные элементы, такие как функции системы, бизнесc-процессы, конкретные детали системы: классы языков программирования, схемы, БД, повторно используемые компонен-ты ПО.
UML содержит стандартный набор диаграмм и нотаций самых раз-нообразных видов, среди которых популярны диаграммы вариантов использования, диаграммы классов, диаграммы компонентов, диаграммы размещения и проч.
Были разработаны основные составные программного продукта (классы), с помощью которых стало возможно достижение поставленной задачи. Так же были составлены диаграммы классов и UseCase – диаграмма согласно требованиям языка программирования UML.
Результатом работы является программный продукт отвечающий заданию, принятым стандартам и нормам.
Список использованной литературы
- Н.Е. Сапожников, Т.А. Беляева, Е.В. Скрябина – Программирование на С++.
- Севастополь 2004 г.
- Страуструп Б. Язык программирования С++. Киев: Диасофт,2001. – 900с.,ил.
- Джефф Элджер Библиотека программиста С++.
- Конспект лекций по дисциплине Объектно-ориентированное программирование спецзадач.
- Липпман С. Б. Основы программирования на C++: Пер. с англ. — М.: Вильямс, 2002. — 256 с.
- Липпман С. Б., Лажойе Ж. Язык программирования С++. Вводный курс: Пер. с англ. — 3-е изд. — М.: ДМК, 2001. — 1104 с.
- Страуструп Б. Язык программирования C++: Пер. с англ. — 3-е спец. изд. — М.: Бином, 2003. — 1104 с.
- Страуструп Б. Дизайн и эволюция языка C++.Объектно- ориентированный язык программирования: Пер. с англ. — М.: ДМК пресс, Питер, 2006. — 448 с.
- Эккель Б. Философия C++. Введение в стандартный C++: Пер. с англ. — 2-е изд. — СПб.: Питер, 2004. — 572 с. [
- Эккель Б., Эллисон Ч. Философия C++. Практическое программирование: Пер. с англ. — СПб.: Питер, 2004. — 608 с
Приложение А
Cmap
int **KARTA;
int n;
int m;
TImage*im;
Cmap();
~Cmap();
void show_map();
void operator<<(Timage*m);
CPoint
int x;
int y;
CPoint();
CPoint(int x1,int y1)
int get_x();
int get y ();
void set ( int x1,int y1);
void set_x (int x1);
void set_ y(int y1);
Ccar
bool b;
bool vertical;
int v;
int fuel;
int target;
CPoint *point;
Timage*Edit;
TProgress*ProgressBar;
TShape*label;
int x;
int y;
int chislo;
Ccar();
~Ccar();
void show();
void operator<<(TImage *im);
void operator<<(TEdit *ed);
void operator<<(TProgressBar *pr);
void operator<<(TShape *sh);
void operator<<(TLabel *lb);
void stop();
int move();
CNavigator
Cmap map;
Ccar car;
Void operator<<(Timage*im);
Void show();
Приложение Г
Unit1.срр
Приложение Б
#include "Unit1.h"
#include "Unit2.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
CNavigator navigator;
//---------------------------------------------------------------------------
void __fastcall TForm1::allow_move(int i) {
if (i==1) {
ComboBox1->Enabled=false;
Button1->Enabled=false;
Button2->Enabled=true;
} else {
ComboBox1->Enabled=true;
Button1->Enabled=true;
Button2->Enabled=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
navigator<<Image1;
navigator.car<<Edit1;
navigator.car<<ProgressBar1;
navigator.car<<Shape1;
navigator.car<<Label8;
navigator.show();
show_trees();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
allow_move(1);
Timer1->Enabled=true;
}
//--------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
allow_move(0);
navigator.car.stop();
Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
float x1,x2,y1,y2;
x1=navigator.car.x;
y1=navigator.car.y;
x2=navigator.car.point[navigator.car.target].get_x();
y2=navigator.car.point[navigator.car.target].get_y();
Edit3->Text=FloatToStrF( pow ( pow(x1-x2,2) + pow(y1-y2,2),0.5) ,ffFixed,4,2);
Edit2->Text=IntToStr(navigator.car.chislo);
Edit4->Text=FloatToStr(x1);
Edit5->Text=FloatToStr(y1);
Edit6->Text=FloatToStr(x2);
Edit7->Text=FloatToStr(y2);
if (navigator.car.move()==0) {
allow_move(0);
Timer1->Enabled=false;
}
if (navigator.car.move()==-1) {
navigator.car.stop();
allow_move(0);
navigator.show();
show_trees();
Timer1->Enabled=false;
ShowMessage("У вас закончилось топливо.Поездка остановлена!!");
}
navigator.show();
show_trees();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
if (!strcmp(ComboBox1->Text.c_str(),"A")) navigator.car.target=0;
else if(!strcmp(ComboBox1->Text.c_str(),"B")) navigator.car.target=1;
else if(!strcmp(ComboBox1->Text.c_str(),"C")) navigator.car.target=2;
else if(!strcmp(ComboBox1->Text.c_str(),"D")) navigator.car.target=3;
else if (!strcmp(ComboBox1->Text.c_str(),"E")) navigator.car.target=4;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
navigator.car.fuel=1000;
navigator.show();
show_trees();
}
Приложение В
Unit2.срр
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
CPoint::CPoint() {
x=y=0;
}
CPoint::CPoint(int x1,int y1) {
x=x1;
y=y1;
}
int CPoint::get_x() {
return x;
}
int CPoint::get_y() {
return y;
}
void CPoint::set(int x1,int y1) {
x=x1;
y=y1;
}
void CPoint::set_x(int x1){
x=x1;
}
void CPoint::set_y(int y1){
y=y1;
}
void CNavigator::operator<<(TImage *im) {
map<<im;
car<<im;
}
void CNavigator::show() {
map.show_map();
car.show();
}
Ccar::Ccar() {
vertical=false;
point = new CPoint[5];
point[0].set(3*10,3*10);
point[1].set(3*(100-10),3*10);
point[2].set(3*10,3*(100-10));
point[3].set(3*(100-10),3*(100-10));
point[4].set(3*50,3*50);
b=false;
x=3*(50-10);
y=3*(100-10);
fuel=250;
target=0;
v=0;
chislo=0;
}
Ccar::~Ccar() {
delete[] point;
}
void Ccar::stop() {
v=0;
b=0;
show();
}
int Ccar::move() {
if (fuel<1) {v=0;return -1;};
/////////
if (x==point[target].get_x())
if (y==point[target].get_y())
{
b=false;
v=0;
chislo=0;
return 0;
}
/////////
if (vertical==false)
/////////////========///////////
if (x<point[target].get_x())
x++;
else if (x>point[target].get_x())
x--;
else if (y>point[target].get_y())
{y--;vertical=true;}
else {vertical=true;y++;}
} else {
if (y>point[target].get_y()) y--;
else if (y<point[target].get_y()) y++;
else if (x<point[target].get_x())
{x++;vertical=false;}
else {x--;vertical=false;}
}
/////////////========///////////
b=true;
fuel--;
v=40+random(10);
chislo=200+random(100);
return 1;
}
void Ccar::show() {
if (!b) Image->Canvas->Brush->Color=clGreen;
else Image->Canvas->Brush->Color=clRed;
Image->Canvas->Ellipse(x-5,y-5,x+5,y+5);
Edit->Text=IntToStr(v);
ProgressBar->Position=fuel;
if (!b) {
Shape->Brush->Color=clLime;
Label->Caption="Машина стоит";