Скачиваний:
53
Добавлен:
01.05.2014
Размер:
432.13 Кб
Скачать
  1. Проектирование конструкторов и деструкторов классов.

Конструкторы и деструкторы обеспечивают учет количества существующих в данный момент объектов класса. Конструкторы при создании присваивают каждому объекту уникальный ID.

Конструкторы и деструкторы «говорящие». При создании и уничтожении объектов выводятся не только названия классов, но и значения проблемных данных и ID объектов.

  1. Разработка методики тестирования классов и тестовых наборов данных.

Для проверки работоспособности всех возможных ветвей разработанной программы достаточно одного теста:

  1. Выводы

Созданные классы точно соответствуют заданию и спецификации и корректно выполняют все поставленные задачи. Тестирующая программа полностью работоспособна и позволяет проверить все возможности разработанных классов.

Достоинство программы:

  • Решает поставленную задачу

  • Корректно работает на всех предложенных контрольных примерах

  • Имеет удобный интерфейс.

  • Говорящие конструкторы и деструкторы

Недостатков в программе не обнаружено.

  1. Сценарий диалога с пользователем

Структура основного меню:

=======[Команды управления сообщениями]=======

Добавить новую актрису(клиент)

Зарегистрироват актрису на сервере

Показать всех актрис

Сказать одной из актрис передвинуться

Сказать всем актрисам передвинуться

=======[Остальные команды (старые)]===========\n");

Вывести параметры вида из ложи

Переместить вид из ложи

Переместить вид из ложи и актрис

Показать вид из ложи

Выйти из программы

Меню выводится циклически, т.е. появляется после выполнения каждой операции.

  1. Количественные характеристики программы

Общая длина текста программы (в строках): 1901. Из них:

Количество строк новых классов: 182

Количество строк тестирующей программы: 115

Общее количество классов, используемых в программе: 17

Количество новых (разработанных при выполнении работы) классов: 2

Общее количество заголовочных файлов: 17

Общее количество файлов-кодов: 18

Всего файлов: 35

Перечень имен новых классов:

Имя класса

Длина текста (в строках) описания класса

Общее количество функций класса, описанных вне класса

CServerView

31

10

CClientActr

28

7

  1. Текст программы (новых файлов)

//Файл: Main.cpp

//Реализация системы обмена сообщениями

//Автор: Сергеев М.В. гр.3352

//Дата: 25.05.06, Редакция: 1.0

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include"ServerView.cpp"

void main()

{

int choice; //choice - переменная выбора пункта меню

// clrscr();

printf ("Реализация системы обмена сообщениями\n");

printf ("Автор: Сергеев М.В. гр.3352\n");

printf ("Дата: 23.04.06, Редакция: 1.0\n");

printf ("\n Создание нового вида из ложи, ансамбля актрис и сервера\n");

CServerView L;

getch();

do //цикл меню

{

// clrscr();

printf ("\n");

printf ("=======[Команды управления сообщениями]=======\n");

printf ("Добавить новую актрису(клиент)...............1\n");

printf ("Зарегистрироват актрису на сервере...........2\n");

printf ("Показать всех актрис.........................3\n");

printf ("Сказать одной из актрис передвинуться........4\n");

printf ("Сказать всем актрисам передвинуться..........5\n");

printf ("=======[Остальные команды (старые)]===========\n");

printf ("Вывести параметры вида из ложи...............6\n");

printf ("Переместить вид из ложи......................7\n");

printf ("Переместить вид из ложи и актрис.............8\n");

printf ("Показать вид из ложи.........................9\n");

printf ("Выйти из программы...........................0\n");

printf ("Ваш выбор");

scanf("%d",&choice);

printf ("\n");

switch(choice) //выбор пункта меню

{

case 1: //Добавление элемента

L.AddElem();

break;

case 2: //Регистрирование элемента

{

CServer* s = L.getPointer();

L.RegElemOnServ(s);

}

break;

case 3: //Вывод списка

L.PrintData();

break;

case 4: //Сдвиг одного элемента

{

CServer* s = L.getPointer();

L.MoveOneMsg(s);

}

break;

case 5: //Сдвиг всех элементов

{

CServer* s = L.getPointer();

L.MoveAllMsg(s);

}

break;

case 6: //Вывести параметры вида из ложи

L.PrintViewport();

break;

case 7: //Переместить вид из ложи

L.MoveViewport();

break;

case 8: //Переместить вид из ложи и актрис

L.MoveActView();

break;

case 9: //Показать вид из ложи

L.ShowScene();

break;

} //switch

} while(choice!=0);

} //main

//Файл: ServerView.h

//Класс "Вид из ложи со свойствами сервера". Прототип.

//Автор: Сергеев М.В. гр.3352

//Дата: 24.05.06, Редакция: 1.0

#include"View.cpp"

#include"Server.cpp"

class CServerView:

public CView,

public CServer

{

private:

static unsigned int countreal; // количество реально существующих объектов

static unsigned int countall; // количество созданных объктов

const unsigned int ID; //идентификатор

public:

CServerView(); //Создать

virtual void ShowScene() const; //Вывести актрис, которые находятся в области просмотра

virtual void MoveActView(); //Переместить область просмотра и актрис одновременно

virtual void MoveViewport(); //Перенести область просмотра в заданном направлении

virtual void MoveOne(); //Переместить одну из актрис

virtual void MoveAll(); //Переместить всех актрис

virtual int regCl(CClient*c); //register clients on server

virtual int resend(CMsg* m); //resend msg from registred user to registred user

virtual int resendAll(CClient* from, int comm);

virtual ~CServerView(); //Уничтожить

};

//Файл: ServerView.cpp

//Класс "Вид из ложи со свойствами сервера". Реализация.

//Автор: Сергеев М.В. гр.3352

//Дата: 24.05.06, Редакция: 1.0

#include<iostream.h>

#include<conio.h>

#include"ServerView.h"

unsigned int CServerView::countreal = 0;

unsigned int CServerView::countall = 0;

////////////////////////////////////////////////////////////////

CServerView::CServerView():ID(++countall) //Конструктор.Создать новый элемент

{

countreal++;

printf (">ID(%d)CServerView\n",ID);

}

//////////////////////////////////////////////////////////////////

CServerView::~CServerView() //Деструктор. Унчтожить элемент

{

printf (" >~ID(%d)CServerView\n",ID);

countreal--;

//getch ();

}

////////////////////////////////////////////////////////////////

void CServerView::ShowScene() const //Вывести актрис, которые находятся в области просмотра

{

CView::ShowScene();

}

////////////////////////////////////////////////////////////////

void CServerView::MoveActView() //Переместить область просмотра и актрис одновременно

{

CView::MoveActView();

}

////////////////////////////////////////////////////////////////

void CServerView::MoveViewport() //Перенести область просмотра в заданном направлении

{

CView::MoveViewport();

}

////////////////////////////////////////////////////////////////

void CServerView::MoveOne() //Переместить одну из актрис

{

CView::MoveOne();

}

////////////////////////////////////////////////////////////////

void CServerView::MoveAll() //Переместить всех актрис

{

CView::MoveAll();

}

////////////////////////////////////////////////////////////////

int CServerView::regCl(CClient*c) //register clients on server

{

return CServer::regCl(c);

}

////////////////////////////////////////////////////////////////

int CServerView::resend(CMsg* m) //resend msg from registred user to registred user

{

return CServer::resend(m);

}

////////////////////////////////////////////////////////////////

int CServerView::resendAll(CClient* from, int comm)

{

return CServer::resendAll(from, comm);

}

////////////////////////////////////////////////////////////////

//Файл: ClientActr.h

//Класс "Актриса со свойствами клиента". Прототип.

//Автор: Сергеев М.В. гр.3352

//Дата: 24.05.06, Редакция: 1.0

#include"Actress.cpp"

#include"Client.cpp"

class CClientActr:

public CActress,

public CClient

{

private:

static unsigned int countreal; // количество реально существующих объектов

static unsigned int countall; // количество созданных объктов

const unsigned int ID; //идентификатор

public:

CClientActr(); //Создать

virtual int readMsg(CMsg*m);

virtual void PrintData() const; //Вывести параметры актриссы

virtual int regOnSrv(CServer*s);//regiter on server

virtual int sendMsg(int com,CServer*s,int toID); //send msg to client #toID

virtual int sendMsgAll(int com,CServer*s); //send msg to all client througth server

virtual ~CClientActr(); //Уничтожить

};

//Файл: ClientActr.cpp

//Класс "Актриса со свойствами клиента". Реализация.

//Автор: Сергеев М.В. гр.3352

//Дата: 24.05.06, Редакция: 1.0

#include<iostream.h>

#include<conio.h>

#include"ClientActr.h"

unsigned int CClientActr::countreal = 0;

unsigned int CClientActr::countall = 0;

////////////////////////////////////////////////////////////////

CClientActr::CClientActr():ID(++countall) //Конструктор.Создать новый элемент

{

countreal++;

printf (">ID(%d)CClientActr\n",ID);

}

//////////////////////////////////////////////////////////////////

CClientActr::~CClientActr() //Деструктор. Унчтожить элемент

{

printf (" >~ID(%d)CClientActr\n",ID);

countreal--;

//getch ();

}

////////////////////////////////////////////////////////////////

int CClientActr::readMsg(CMsg*m)

{

int mes;

mes = CClient::readMsgRet(m);

CActress::MoveDX(mes);

return CClient::readMsg(m);

}

////////////////////////////////////////////////////////////////

void CClientActr::PrintData() const //Вывести параметры актриссы

{

CActress::PrintData();

}

////////////////////////////////////////////////////////////////

int CClientActr::regOnSrv(CServer*s)

{

return CClient::regOnSrv(s);

}

////////////////////////////////////////////////////////////////

int CClientActr::sendMsg(int com,CServer*s,int toID)

{

return CClient::sendMsg(com,s,toID);

}

////////////////////////////////////////////////////////////////

int CClientActr::sendMsgAll(int com,CServer*s)

{

return CClient::sendMsgAll(com,s);

}

////////////////////////////////////////////////////////////////

9