路由模拟——类设计的声明部分

类别:.NET开发 点击:0 评论:0 推荐:


                         路由模拟系统 设计方案(一)
                            接口说明部分

2004-3-21

一, 全局名空间
路由模拟系统中所有全局变量与函数皆实现在一个名空间中。


名空间:NetSource
名空间内变量:
   #define NULL 0
       //网络设备类型表
   enum NetElementType{FIBER=1,CENTRALROUT};
   //路由IP地址长度
   const int IP_ADDRESS_LENGTH=32;
   //路由表最大长度
   const int MAX_ROUT_TABLE_SIZE=100;
   //路由器端口最大数据包容量
   const int MAX_DATA_QUEUE_LENGTH=20;
名空间内函数:
   //判断两个IP地址是否相等
   bool AddrEqual(const unsigned int * addr1,const unsigned int * addr2);

二,类设计
 路由模拟系统的类根据前文档类图设计。所有类的构造函数与析构函数接口说明略。

1, 网络元素
类名:  NetElement
类的性质: 纯虚基类
父类:  无
类的主要属性:
    // 网络设备的类型
    < protected > NetElementType netElementType;
类的主要接口:
    // 获得网络设备的类型
    < public > virtual NetElementType GetType(void) = 0;

2, 网络线路
类名:  
AbsLine
类的性质: 纯虚基类
父类:  公有继承NetElement
类的主要属性:
   继承属性略;

    // 网络线路的长度
    < protected > int length;
类的主要接口:
    < public > virtual void SetLength(int _length) = 0;
    < public > virtual int GetLength(void) = 0;

3, 光纤
类名:  Fiber
类的性质: 可实例化子类
父类:  公有继承AbsLine
类的主要属性:
   继承属性略;
类的主要接口:
    // 获得网络设备的类型
    < public > NetElementType GetType(void);
    // 设置线路物理长度
    < public > virtual void SetLength(int _length);
    // 获得线路物理长度
    < public > virtual int GetLength(void);

4, 路由器
类名:  AbsRout
类的性质: 纯虚基类
父类:  公有继承NetElement
类的主要属性:
   继承属性略;
    // 路由器自身地址
    < protected > int selfAddress[IP_ADDRESS_LENGTH];
    // 路由表
    < protected > Table routTable;
    //当前IP数据包
    < protected > NetData currTPData;
    //数据端口
    < protected > std::list <NetData> dataInList;
    < protected > std::list <NetData> dataOutList;
    < protected > std::list <NetData>::iterator dataIter;
    //当前数据端口数据量
    < protected > int dataListLength;
类的主要接口:
    // 路由器发送数据至端口
    < protected > virtual void SendData(void) = 0;
    // 路由器从端口接收数据
    < protected > virtual void ReceiveData(void) = 0;
    // 网络向路由器端口写数据
    < public > virtual bool NetWriteData(NetData & _netData) = 0;
    // 网络从路由器端口接收数据
    < public > virtual NetData * NetReadData() = 0;
    // 设置路由表
    < public > virtual void SetRoutTable(void);
    //路由计算:函数指针
    < protected > void (*RoutCompute)(int **_netArray,int **_valArray,
int **&result,int routNum,int index);
    // 对当前数据包进行路由计算
    < protected > void DataRoutCompute(void);
    //设置路由计算方法
    < public >  void SetComputeMethods(void _routCompute(int **,int **,
int **&,int,int));
    // 设置自身地址
    < public >  virtual void SetSelfAddress(
unsigned int addr[IP_ADDRESS_LENGTH]);
    // 获得自身地址
    < public >  virtual unsigned int * GetSelfAddress(void);
    // 空
    < public > virtual void SetNetInfor(int ** _netArray, int ** valArray,
 int _routNum);
    // 产生数据
    < public > void MakeData(NetData & netData);
5, 中心路由器
类名:  CentralRout
类的性质: 可实例化子类
父类:  公有继承AbsRout
类的主要属性:
   继承属性略;
    //网络信息
    < private > int **netArray,**valArray;
    //发送数据包跟踪器
    < private > double id;
类的主要接口:
    // 获得设备类型
    < public > virtual NetElementType GetType(void);
    //网络向端口发送数据
    < public > virtual bool NetWriteData(NetData & _netData);
    // 网络从路由器端口接收数据
    < public > virtual NetData * NetReadData();
    // 设置路由表
    < public > virtual void SetRoutTable(void);
    //洪泛过程获得网络信息
    < public > virtual void SetNetInfor(int ** _netArray, int ** _valArray,int _routNum);
    // 路由器向端口发送数据
    < protected > virtual void SendData(void);
    // 路由器从端口接收数据
    < protected > virtual void ReceiveData(void);

6, 网络结点
类名:  NetNode
类的性质: 可实例化类
父类:  无
类的主要属性:
    // 路由器
    < public > AbsRout *pRout;
    // 网络线路
    < public > AbsLine *pLine;

    < public > NetNode *pNextNode;
类的主要接口:
    无

7, 网络
类名:  
Net
类的性质: 可实例化类
父类:  无
类的主要属性:
    // 网络中路由器个数
    < private > int routNum;
    //网络中网络线路个数
    < private > int lineNum;
    // 网络的数据结构:邻接表
    < private > NetNode *pNodeArray;
    //网络的相邻矩阵和耗散矩阵
    < private > int ** netArray;
    < private > int ** valArray;
    //路由器的类型向量
    < private > NetElementType * routTypes;
    //网络线路的类型向量
    < private > NetElementType * lineTypes;
    //网络初建
    < private > static bool first;
类的主要接口:
    // 创建空网络
    < public > void Create(int _routNum);
    // 创建主干网络
    < public > void Create(int ** _netArray, int ** _valArray, int _routNum);
    // 创建任意类型网络
   < public > void Create(int ** _netArray, int ** _valArray, int _routNum,int _lineNum, NetElementType * R,  NetElementType * L);
    // 获得网络信息
    < private > void GetNetInfor(void);
    // 判断网络是否发生改变
    < private > bool IsChanged(void);
    // 释放资源
    < private > void Clear(void);
    // 创建网络
    < public > void ReCreate(void);
    // 据地址获得路由器序列的下标
    < public > int GetRoutID(unsigned int addr[IP_ADDRESS_LENGTH]);
    //获得pNodeArray
    < public > NetNode *& GetpNodeArray();
    // 产生网络传输的数据包
    < public > int MakeData(void);
    // 产生网络传输的数据包
    < public > int MakeData(NetData &_ipData);
    // 路由计算的建立
    < public > void RoutComputeBuilder(void);

8, 路由表结点
类名:  
TableNode
类的性质: 可实例化类
父类:  无
类的主要属性:
    // 目标地址
    < public > unsigned int addressTo[IP_ADDRESS_LENGTH];
    // 下一个中继路由地址
    < public > unsigned int addressNextHop[IP_ADDRESS_LENGTH];
类的主要接口:
    // 设置目标地址
    < public > void SetAddressTo(unsigned int _addressTo[IP_ADDRESS_LENGTH]);
    // 设置下一个中继路由地址
    < public > void SetAddressNextHop(unsigned int
_addressNextHop[IP_ADDRESS_LENGTH]);

9, 路由表
类名:  
Table
类的性质: 可实例化类
父类:  无
类的主要属性:
    // 路由器数量
    < private > int routNum;
    // 路由表
    < private > TableNode table[MAX_ROUT_TABLE_SIZE];
类的主要接口:
    // 设置路由器数量
    < public > void SetRoutNum(int _routNum);
    //  设置路由表
    < public > void SetTable(TableNode _table[MAX_ROUT_TABLE_SIZE]);
    // 获得下一个中继路由地址
    < public > int * GetAddrNextHop(int addrTo[IP_ADDRESS_LENGTH]);
    // 获得路由器数目
    < public > int GetRoutNum(void);
10, 网络数据包
类名:  NetData
类的性质: 可实例化类
父类:  无
类的主要属性:
    // 网络数据包之源地址
    < private > unsigned int addressFrom[IP_ADDRESS_LENGTH];
    // 网络数据包之目标地址
    < private > unsigned int addressTo[IP_ADDRESS_LENGTH];
    // 网络数据包之前中继地址
    < private > unsigned int preHop[IP_ADDRESS_LENGTH];
    // 网络数据包之后中继地址
    < private > unsigned int nextHop[IP_ADDRESS_LENGTH];
    // 是否是消息
    < private > bool bMessage;
    // 数据包跟踪计数器:消息与IP数据包一一对映
    < public > double ID;
    // 网络数据包之数据信息
    < private > int ipData[IP_ADDRESS_LENGTH];
类的主要接口:
    // 判断是否为应答消息
    < public > bool IsMessage(void);
    //判断网络数据包是否相同
    < public > bool operator ==(NetData &netData);
    // 设置网络数据包源地址
    < public > void SetAddressFrom(unsigned int addrFrom[IP_ADDRESS_LENGTH]);
    // 设置网络数据包目标地址
    < public > void SetAddressTo(unsigned int addrTo[IP_ADDRESS_LENGTH]);
    // 获得网络数据包源地址
    < public > unsigned int * GetAddressFrom(void);
    // 获得网络数据包目标地址
    < public > unsigned int * GetAddressTo(void);
    // 设置网络数据包之前中继地址
    < public > void SetPreHop(const unsigned int _preHop[IP_ADDRESS_LENGTH]);
    // 设置网络数据包之后中继地址
    < public > void SetNextHop(const unsigned int _nextHop[IP_ADDRESS_LENGTH]);
    // 获得网络数据包之前中继地址
    < public > unsigned int * GetPreHop(void);
    // 获得网络数据包之后中继地址
    < public > unsigned int * GetNextHop(void);
    // 设置IP数据包之数据内容
    < public > void SetIPData(const int _ipData[IP_ADDRESS_LENGTH]);
    // 获得IP数据包之数据内容
    < public > int * GetIPData(void);
11, 通信
类名:  Communication
类的性质: 可实例化类
父类:  无
类的主要属性:
    // 网络模拟
    < private > Net &net;
    //网络数据结构的引用
    < private > NetNode *& pNodeArray;
类的主要接口:
    // 单数据包路由
    < public > void SingleDataRout(void);

 

 

                                                <2004-4-10 修改>

本文地址:http://com.8s8s.com/it/it44851.htm