Курсовик по ООП / Пояснительная записка
.doc1. Задание
Цель работы: Выполнить разработку объектно-ориентированной программы, использующей обмен сообщениями между объектами, сконструированными в третьей лабораторной работе.
Из третьей лабораторной работы имеем систему классов, обеспечивающую работу с объектами следующего вида:
Из четвертой лабораторной работы имеем систему классов, обеспечивающую обмен сообщениями между независимыми объектами. Параметры связи: двухсторонняя, один сервер, отчет о доставке.
Задание:
Обеспечить возможность передачи сообщений между планетами системы. Сервером выступает система.
2. Идея обмена сообщениями:
Предполагается, что сообщение, посылаемое планетой, содержит время. Планета, при приеме сообщения должна вывести свои координаты в запрашиваемый момент времени. Схема сообщения включает в себя адрес отправителя, адрес получателя, сообщение. Таким образом, каждая планета должна иметь интерфейс, обеспечивающий передачу сообщений, описанный в лабораторной работе 4. Центр системы также должен иметь этот интерфейс.
Обмен сообщениями производится вызовом функции «принять сообщение» сервера от сообщения, сформированного одной планетой и адресованного другой планете. Такой способ соответствует общей идее, так как метод интерфейса «послать сообщение» должен определять действия по формированию сообщения, а метод «принять сообщение» - действия по обработке сообщения.
Указывая в качестве адресата систему, производится отправка сообщения всем планетам.
Причем отправка сообщения производится на адрес любой планеты системы, так как планета, добавленная в систему, считается зарегистрированной.
2. Формирование с помощью наследования классов новых проблемных объектов, способных обмениваться сообщениями.
Так как каждая планета является наследником класса, задающего интерфейс «Планета».
Чтобы обеспечит передачу сообщений, планета должна является наследником класса «Объект», задающего интерфейс объекта передачи сообщений.
Таким образом, должны быть модернизированы классы «Элемент списка планет» и «Список планет», чтобы обеспечить обращение к соответствующим методам передачи сообщений каждой конкретной планеты в списке.
Класс «Система», выступающий в роли сервера, должен быть наследником класса «Объект» и обеспечивать передачу сообщений между планетами.
3. Проектирование конструкторов и деструкторов.
Конструктор класса «Планета» должен задавать адрес созданной планеты – номер по порядку создания.
Конструктор класса «Система» должен задавать адрес системы.
Описание остальных конструкторов не отличаются от приведенных в лабораторных работах 3 и 4.
4. Файловая система.
Adress.h файл объявления класса «Адресс»
Adress.cpp файл описания класса «Адресс»
Message.h файл объявления класса «Сообщение»
Message.cpp файл описания класса «Сообщение»
Figure.h файл объявления класса «Фигура»
Planeta.h файл объявления класса «Планета»
Planeta.cpp файл описания класса «Планета»
Krug.h файл объявления класса «Круг»
Krug.cpp файл описания класса «Круг»
Kvadrat.h файл объявления класса «Квадрат»
Kvadrat.cpp файл описания класса «Квадрат»
Treug.h файл объявления класса «Треугольник»
Treug.cpp файл описания класса «Треугольник»
Ellips.h файл объявления класса «Эллипс»
Ellips.cpp файл описания класса «Эллипс»
Object.h файл объявления класса «Объект»
PlElem.h файл объявления класса «Элемент списка плаенет»
PlElem.cpp файл описания класса «Элемент списка плаенет»
PlList.h файл объявления класса «Список планет»
PlList.cpp файл описания класса «Список планет»
Sistema.h файл объявления класса «Система»
Sistema.cpp файл описания класса «Система»
5
Message +getOtp:Adress +getPol:Adress +getMsg:int
msg +setOtp(Adress) +setPol(Adress) +setMsg(int
)
Krug
+getR():double
R +getArea():double
S
+
getAngle():double
Angle
+Print()
Квадрат +getA():double
A +getArea():double
S
+
getAngle():double
Angle
+Print()
Треугольник +getA():double
A +getArea():double
S
+
getAngle():double
Angle
+Print()
Эллипс
+getLmax():double
lmax
+getLmin():double
lmin
+getAngle():double
Angle
+getArea():double
S
+Print()
+setLmax(double _Lmax) +setLmin(double
_Lmin) +setAngle(double
_Angle)
Планета +getNom():int
Nom +getV():int
V +Print() +getLmax():double
lmax +getLmin():double
lmin +getAngle():double
Angle +getFi0():double
Fi0 +getXpt(double
t):double X +getYpt(double
t):double Y +PrintS(double
t) +setV(int
_V) +setLmax(double
_Lmax) +setLmin(double
_Lmin) +RevolO(double
dFi) +MashtO(double
dN)
+MoveO(double dX,double dY)
Фигура
+ getX()
+getY() +Move(double
dX,double dY)
+Revol(double dFi)
+Masht(double dN)
Элемент списка
+getPred():Plelem*
Pred +getNom():int
Nom
+getV():int
V
+getLmax():double
lmax
+getLmin():double
lmin
+getAngle():double
Angle
+getFi0():double
Fi0
+getXpt(double
t):double X
+getYpt(double
t):double Y
+PrintS(double
t) setPred(Plelem*
Pred0)
+setV(int
_V) +setLmax(double
_Lmax) +setLmin(double
_Lmin)
+RevolO(double
dFi)
+MashtO(double
dN)
+MoveO(double
dX,double dY)
Список планет
+getNomp(int
nom):int id
+getXp(int
nom):double X
+getYp(int
nom): double Y
+
getXpt(int
nom,double t) :double X
+
getYpt(int
nom,double t): double Y
+
getV(int
nom): int V
+
PrintS(int
nom,double t)
+
getNel():unsigned
int Nel
+
PrintList(double
t)
+
setV(int
nom,int _V)
+
setLmax(int
nom,int _Lmax)
+
setLmin(int
nom,int _Lmin)
+
RevolO(int
nom,double dFi)
+
MashtO(int
nom,double dN)
+
MoveO(int
nom,double dX,double dY)
+
goPred()
+
goHead()
+
insLast(int
_X,int _Y,int _Lmax,int _Lmin,double Fi,double Fi0,int _V,int
form,double _Angle)
+
DelPlanet(int
nom)
Система +PrintSys(int
t) +
ParadPl():double t +getXc():double
X
+
getYc():double
Y
+NewPlanet(_Lmax,int
_Lmin,double Fi,double Fi0,int _V,int form,double _Angle +
Move(double dX,double dY) Adress +getAdress:int
id +setAdress(int
id) Object +Send:Message +Receive(Message) +getAdr:Adress
6. Количественные характеристики программы.
Общие количественные характеристики:
Общая длина текста программы: 2236
Общее количество классов: 12
Количество новых классов: 3
Общее количество заголовочных файлов: 12
Общее количество файлов кодов: 10
Обусловленные применением наследования:
Количество иерархий наследования: 2
Максимальное количество уровней в созданных иерархиях наследования: 3
Количество использованных ранее разработанных классов: 9
Количество тех из них, в которые потребовалось внести изменения: 7
Суммарная длина текстов новых программных компонентов: 215
7. Таблица новых функций по отношению к 3 и 4 лабораторным работам.
Класс «Планета»
Название |
Назначение |
Параметры |
Предусловия |
Постусловия |
Send(_Pol,_Msg) |
Послать сообщение |
Тип double, Adress входные |
Планета существует |
Сообщение послано |
getAdr() |
Вернуть адрес |
нет |
Планета существует |
Значение возвращено |
Receive(_Msg) |
Принять сообщение |
Тип Massage входные |
Планета существует |
|
Класс «Список планет»
Название |
Назначение |
Параметры |
Предусловия |
Постусловия |
SendP(nom,_Pol, _Msg) |
Послать сообщение по номеру планеты |
Тип int, double, Adress входные |
Планета существует |
Сообщение послано |
getAdr(nom) |
Вернуть адрес по номеру |
Тип int входные |
Планета существует |
Значение возвращено |
ReceiveReg(_Msg) |
Принять сообщение |
Тип Massage входные |
Планета существует |
Сообщение передано адресату |
Класс «Система»
Название |
Назначение |
Параметры |
Предусловия |
Постусловия |
getAdr() |
Вернуть адрес |
нет |
Система существует |
Значение возвращено |
Send(_Pol,_Msg) |
Послать сообщение |
Тип double, Adress входные |
Система существует |
Сообщение послано |
Receive(_Msg) |
Принять сообщение(переслать адресату) |
Тип Massage входные |
Система существует |
Сообщение отослано адресату |