【NS3】Object类

Object是大部分网络元素类的基类。它在继承了SimpleRefCount类和ObjectBase类基础上,还实现了对象聚合的功能。

对象聚合是理解Object类使用方法的核心。

Node类是对象聚合技术的最主要使用者。

我们先以Node类为例讲解对象聚合的技术原理。随后介绍Object类的使用。

对象聚合

作用

Node中可以提取不同协议层的网络对象。

除了信道,Node类中都定义有指向其他协议层核心对象的指针。

对象聚合的作用就是统一定义这些对象指针的存储、配置和提取方式。

在这里插入图片描述
可以看到,传输层(TcpL4ProtocolUdpL4Protocol)和网络层(Ipv4L3Protocol)对象统一以Object基类指针的形式存储在Node对象的一个指针数组当中。

这个数组就是对象聚合所使用的指针数组,也叫聚合数组

Node中安装的大部分协议对象都存储在这个聚合数组中。

例外的是,应用层和链路层NetDevice对象分别单独存储在两个指针向量容器中。

既然ApplicationNetDevice也是Object的子类,为什么不能同样存储在聚合数组中呢?

对象聚合的技术原理

没有对象聚合情况下,传输层基类IpL4Protocol如何进行关联?

class Node:public Object{
public:
	//设置函数
	bool SetIpL4Protocol(Ptr<IpL4Protocol>protocol);
	//提取函数
	Ptr<IpL4Protocol>GetIpL4Protocol()void;

private:
	//指针变量
	Ptr<IpL4Protocol>IpL4Protocol;
}

考虑到封装性,这个指针通常会被定义为私有变量。

多个关联对象就需要定义多个名称和各不相同的提取和设置函数。

易用性和可扩展性都不好。

对象聚合也沿用了这种思路。但是把存储、提取和设置操作都放在了Object基类中统一解决。

class Object:public SimpleRefCount<Object, ObjectBase, ObjectDelete>{
public:
	//设置函数
	void AggregateObject(Ptr<Object>ohter);
	//提取函数
	template<typename T>
	inline Ptr<T>GetObject(void)const;

private:
	struct Aggregates{
		uint32_t n;           //聚合数组元素数量
		Object *buffer[1];    //聚合数组起始指针
};
	struct Aggregates *m_aggregates;//聚合数组
	}

通过一个Object指针数组,对象聚合将关联对象的存储、获取和设置都统一了起来。

  • 统一的存储格式
  • 统一的提取方法
  • 统一的设置方法
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值