对象实现论文范文

2024-07-12

对象实现论文范文(精选10篇)

对象实现论文 第1篇

关键词:C++,智能指针,引用计数,对象,对象管理

0 引言

面向对象程序设计是指一种程序设计范型, 同时也是一种程序开发的方法论。它将对象作为程序的基本单元, 将程序和数据封装其中, 以提高软件的重用性、灵活性和扩展性。在通常情况下, C++程序员可以完全控制对象的分配与释放。在程序使用new表达式创建动态分配的对象, 用delete表达式结束此类对象的生命期。这里通过new表达式分配的空间与局部变量分配的空间存放区域是不一样的。通常是局部变量、函数参数存放在栈里, 由编译器在需要的时候分配, 在不需要的时候自动清除变量的存储区。那些由new分配的内存块存放在堆里, 也就是说它们的释放不用编译器去管理, 而是由我们的应用程序去控制, 一般一个new就要对应一个delete。如果程序员没有做释放内存的操作, 那么这段内存就会一直被占用直到程序完全结束, 这样就有可能产生内存泄露的问题。在此引入一种自动内存管理方式, 通过使用智能指针 (Smart Pointer) 技术, 构建对象树进行统一的管理。这样就使软件项目中所有设计到的对象由程序自动构建和释放, 从而有效地避免了内存泄露的问题, 提高了C++程序的质量;同时也节省了堆上的内存空间, 有利于对象的查找、使用和管理。

1 C++的智能指针

所谓智能指针, 实际上是一种类模板, 当它实例化后包含指向动态分配内存的指针, 它通过重载→运算符来模拟指针的行为, 同时在适当的时候释放内存, 以达到自动内存管理的目的, 其定义通常为templateclass Smart Ptr。现在, 智能指针在C++应用开发中大量使用, 已经成为C++标准的工具之一。

资源共享型的智能指针是引用计数的设计方法, 一般分为侵入式与非侵入式两种。侵入式引用计数, 是将计数器作为包含对象的一部分, 该方法效率比较高, 但要求包含类型总是继承自一个计数对象;非侵入式引用计数, 是计数器通过动态分配内存获得, 任何类型的对象均可作为智能指针的范型参数, 但小内存的new操作会降低智能指针的效率。在此应用STL、句柄的技术设计一种自适应包含类型的入侵式的智能指针。

2 对象管理机制

软件工程项目需要工程化的管理, 对整个软件生存期的一切活动进行统一管理, 以达到提高生产率、改善产品质量的目的。同样针对软件中所有的对象实例可以进行统一的安排调度, 这样可以有效地节省内存资源、减少冗余代码、提供代码的执行效率, 增强软件产品的质量。所以在基于面向对象程序中设计出一种结构清晰、高效、节省空间的对象管理机制是势在必行的, 同时也是软件产品提高自身质量的发展趋势。

本方案的设计思想是:通常软件各个功能模块的架构为树形结构, 对象管理的构建按照软件功能模块进行, 每个模块为树根的一个树枝节点, 在树的叶子节点分布该功能模块所用到的对象实例。双亲节点所代表的对象称为其孩子节点所代表对象的父对象, 父对象一定是管理类的对象, 孩子节点所代表对象成为父对象的子对象。父对象是其所有子对象的管理者, 负责子对象的创建、复制、赋值和销毁。

以树的存储方式及其访问算法为基础, 实现一种在软件生存期内动态构建对象树, 动态创建对象并加入对象树的方法。为此, 定义函数指针Call Back Tyep为Named_interface* (*Call Back Type) (std:string&) , 回调函数表Call Back Map为map类型, 分别存放类名称和类的实例化函数指针;定义对象表Interface Map为map>类型, 分别存放创建后的对象名称和对象指针。管理类可以构建一棵对象树来管理程序中所创建的对象。其中对象创建和销毁都应用智能指针加以保护, 这样可以有效地避免内存泄漏的问题。为了能够高效地查找对象管理树中的每一个对象, 因此每个对象都有一一对应的路径和名称。例如在数据输入输出库的对象管理树中, 被管理对象的路径是/Filter/Input Filters/, 其中第一个“/”代表Root, 类型名称是Filter, Input Filters是对象指针的名称。

父对象管理其下的子对象有如下的步骤:

(1) 在父对象的回调表中注册对象的类型

父对象中的回调表factory_是Call Back Map类型, 因此对象注册就是将对象类型和创建函数指针插入父对象的factory_中。

(2) 创建对象

根据对象路径递归查找要创建对象的父对象。在父对象的回调表中, 查找要创建对象的类型是否是注册过。只有注册过的类型才能得到该类的实例化函数指针, 来创建该类的对象。最后再将创建好对象的名称和该对象的指针插入到父对象的interfaces_中。 (3) 获取对象指针

根据对象路径递归查找要创建对象的父对象。然后在父对象的interfaces_中, 根据对象名称查找该对象是否存在。如果能够查找到, 则返回其指针。

(4) 对象的删除

根据对象路径递归查找要创建对象的父对象。然后在父对象的interfaces_中, 根据对象名称删除该对象。

3 对象管理实现的部分代码

3.1 智能指针的实现

3.2 引用计数的实现

const Named_interface*new_ref () const{//每次新建一个对象计数为0,

3.3 管理对象树实现代码

4 结束语

在软件设计中, 通过以树形结构架构软件各个功能模块, 再对系统中使用到的对象进行抽象、划分、归属到各个功能模块中, 以各个模块构建对象树并进行管理是切实可行的。同时运用智能指针计数也可以有效避免C++程序设计内存泄露的问题。该方法对软件中的对象创建、销毁、访问、赋值进行管理, 可以有效地节省内存资源, 增强软件产品的质量。基于面向对象程序的设计中, 设计一种结构清晰、高效、节省空间的对象管理机制是势在必行的, 同时也是软件产品提高自身质量的发展趋势。

参考文献

[1]揣锦华, 李军民.C++程序设计语言[M].西安:西安电子科技大学出版社, 2002.

[2]蓝雯飞.C++面向对象程序设计中的多态性研究[J].计算机工程与应用, 2002 (8) .

[3][美]利普曼, [加]劳乔.C++Primer中文版 (第三版) [M].潘爱民, 张丽, 译.北京:中国电力出版社, 2002.

[4]张彤, 何源.一种自适应的引用计数智能指针的实现[J].成都大学学报 (自然科学版) , 2007 (3) .

[5]王峰.C++类模板关系的抽象描述语言的设计[D].湖南:长沙理工大学, 2008.

[6]王曦.再论智能指针的标准之争:Boost vs.Loki[J].程序员, 2003 (4) .

对象实现论文 第2篇

一直以为遍历Object只能obj.name这种方式,今天做数据比较,才发现

代码如下:

var g2:Object = expensesAC.getItemAt(0);

for(var i:Number=0;i<=23;i++){

if(g2[“times”+i]==“0”){

num--;

}else{

d2g+=g2[“times”+i];

}

}

这种方式,其实觉得Object和java里的HashMap很类似,都是命值对,

具体例子:

代码如下:

private function init:void {

//新建对象

var obj:Object = new Object();

//增加key-value

obj[“name”] = “liguoliang”; //格式: Object[key] = value

obj[“age”] = 25;//注意: key必须为String, value可以为任意类型

//使用for..in...遍历所有的key - value

for(var k:String in obj) {

trace(“Key: ” + k + “ - value: ” + obj[k]);

}

//使用for each..in遍历HashMap

for each( var v:* in obj) {

trace(“value: ” + v);

}

//删除一个key-value

delete obj[“age”];

//使用for..in...遍历所有的key - value

for(var k:String in obj) {

trace(“Key: ” + k + “ - value: ” + obj[k]);

}

对象实现论文 第3篇

关键词:ArcSDE技术;GIS技术;集成化管理;面对对象

中图分类号:TP311

随着城市规模不断的发展和壮大,建设市级综合资源的基础数据库已经成为必须。运用现代的数据库信息技术,面向对象集成化管理各级多源的空间数据。现在常采用的数据库管理技术有ArcSDE技术、GIS数据库、CAD平台、MapGIS、Maplnfo、SuperMap、Arcels等矢量数据格式、遥感影像数据、航空影像数据、卫星影像数据等。建设市级综合资源信息系统,不仅可以加快服务工作的信息化,提高日常的办公效率和市级政府的管理水平,同时,也对整个信息化和经济化的社会带来好的影响。这些年来,计算机技术、软件更新、硬件设施和空间信息技术的发展壮大,已经有大量的城市综合信息为市级政府提供支持和服务。城市综合信息数据库的建设也有很好的发展。在GIS技术不成熟之前,城市的信息数据是相分离的,空间数据和非空间数据不能集成在一起,因此对城市信息的收集和管理缺乏统一的认识。在GIS空间数据库技术成熟之后的今天,已经实现了空间数据库管理空间数据的可能性,集成空间数据与属性数据为一体整理存档在空间数据库管理系统中,早前出现的大量文件形式的数据存取难、多名使用者同时发送和数据远程共享等多方面的限制已经被解决。城市综合信息集成化空间数据库的建立为城市的管理和信息共享提供了可能,只有标准化、面对对象的、集成型的资源共享平台,才能更好的服务于城市建设和管理,综合应用一体化空间数据库管理各式各样的内容、格式、尺度、时间的空间数据,才是科学有效的城市综合信息数据库。在城市综合信息数据库中,基础的地理信息数据库是城市公用性最重要的数据库。能否建立一个健全的市级基础地理信息数据库,是检验一个城市的数字信息化程度的一个重要标准。为推动不同地理空间数据集的非重复采纳,避免浪费,调节地理空间数据的采用,对地理信息进行高效且经济的管理,需要建设地理基础信息数据库。国家测绘局提出的4D产品战略已经基本完成了全国范围内的1:5万、1:25万、1:100万的基础地理数据库的管理。我市与其他各省市正在按照国家的标准建立属于自己的基础地理数据库。本文结合我市基础地理数据库的建设开展研究,对如何建立面向对象的集成化数据库系统进行设计并实现。

1 城市地理数据特点

(1)地理数据类型。城市地理数据类型按数据的类型划分,有属性文件数据、空间图形数据、多媒体数据、相关的文档数据等内容。数字线划图是带有拓扑关系的用矢量描述的空间信息,同时还包含关系结构属性信息。涵盖的内容有居民居住地、政府部门所在区域、交通和管理网、水系统以及配套设施、地形地貌、街区名测量控制点等内容。此数据库的建立可以方便的用于城市规划建设、资源管理方面、商业规划等各个方面。也可以为某些专业信息系统提供空间定位系统。也可以生产关于地形图方面的产品。(2)地理空间数据的格式。地理空间图形数据的格式有多种多样,地理空间图形数据的测绘大多是在CAD平台的基础上,在地理空间数据中应该包括建成的GIS数据。另外地理空间数据还应该包含关于遥感的影像数据的处理,其中卫星影像数据和航空影像数据应包含在遥感的影像数据中。只有地理空间数据格式多种多样才能保证数据在应用中和共享方面的复杂多样。(3)地理空间数据的尺度。地理空间数据的尺度需求为多尺度的,同类型的地理空间要素要表现不同的性质在不同类型的尺度中。多尺度类型的数据可以更好更全面的表现基础地理数据库的业务差异和需求。在区县的地籍管理中,空间地理位置要求更高的精确度,常采用很大的比例尺作为空间数据尺度。(4)地理空间数据的时间。时间特性是基础地理空间数据库的一个重要的特点。地理空间数据在实践方面总处于变化之中,每次的变化都是用空间数据来更新体现。在地理空间数据库中,也经常要对过去的变化信息进行分析更新,以此提高判断的科学性和高效性。

2 数据库的设计思路

我市的基础地理空间数据库管理系统运用ArcSDE技术的建库模式,采用面对对象这一基本组件进行开发。运用工具VB和ArcObjects开发。用Oracle9i作为数据库的管理层面,Oracle9i的优点是大数据库支持可以实现安全以及完整性的控制要求,并且可兼容、可连接、可移植。空间数据引擎引用ArcSDE,该空间数据引擎与Oracle的结合实现了空间数据的大量存储管理。同时这两者的结合也是至今为止世界上最成熟稳定的空间数据管理技术,同样也是我市建设基础空间数据库的主要形式。

数据库管理系统的总体有以下几部分组成,有软硬件、网络环境、空间数据库、数据库的管理服务系统等,具体如一些工作站、服务平台、微型空间数据库、存储装置、网络设备等等。空间数据库则包括了数字线划图、数字栅格地图、数字高程模型、地名以及数字正射影像地图等数据库。数据库的管理系统中对服务系统的维护和使用是利用软件系统的开发实现的,譬如数据入库、处理、管理、维护、制图等。

我市地理基础空间数据库采用GeoDatabase数据模型,面向对象进行数据模型的组织,利用这个GeoDatabase数据模型定义不同的客户,因而为不同客户提供不同的且完整的数据平台。根据基础地理信息的数据结构与GeoDataBase的数据模型相结合,将空间数据库划分为五个等级:总库、分库、子库、逻辑层、物理层。总库通过命名Oracle数据库自定义为市基础空间数据库。分库命名也根据Oracle数据库自定义为1:25万为“250K”、1:5万为“50K”、1:1万为“10K”。每个分库在划分子库,命名为“DLG”为矢量数据库,“DOM”为数字正射影像数据库等。接下来是逻辑层和物理层,根据DLG数据库的要求,按每个逻辑层和Feature Class进行分层,ArcSDE中相对应Feature Class的命名规定为总库名+分库名+“_”+子库名+带号+“_”+逻辑层代码+“_”+物理层层代码。

多个空间的数据服务器应用系统一体化集成是地理空间数据库必须解决的问题,数据量特别庞大,且常用一台服务器进行管理,在数据的大量处理中必然会带来一定影响。所以可以将空间数据库进行多台服务器存放,服务器可分不同区域存放,分散空间数据库的方式是一种高效的管理途径。通过数据管理器对不同空间数据服务器的集成管理满足了大规模空间数据库应用系统的建设需要。

3 结束语

GeoStar的核心是面向对象的集成数据库的管理系统,它高效、适应性广、直观。已经应用在全国的基础地理信息系统上。本文介绍的利用ArcSDE技术和GIS技术,并且采用集成化管理影像、矢量和DEM三库集成的的空间数据为模型。

对市级基础地理数据库进行基础库管理系统的设计,已经在应用中,并且为“数字地球”的目标提供了一个可以实施的方案。

参考文献:

[1]潘瑜春,钟耳顺,梁军.基于空间数据库技术的地籍管理系统研究[J].地理研究,2003(02):237-244.

[2]万定生,张俐,吴红.中间件技术在汛情监视地理信息系统中的应用[J].计算机工程与科学,2003(01).

[3]张成才,孙喜梅,黄慧.SDE的实体——关系模型空间数据管理方式研究[J].计算机工程与应用,2003(02):199-201.

[4]周卫.Arc/Info的新型数据模型Geodatabase及其操作[J].计算机与地图,2001(05).

[5]ESRI.ArcGIS Hydro Data Model[Z].ESRI Press,2001.

[6]李家田,刘洪斌,武伟,等.基于SDE的土壤信息系统空间数据库的设计和构建[J].西南农业大学学报,2003(02).

作者简介:刘群娣(1975.10-),女,本科,讲师。

基于对象的三维动画仿真的实现 第4篇

基于对象方法是指在软件开发的过程中采用面向对象的方法,基于对象的方法是建立在“对象”概念基础之上的方法学。这种方法具有动态性、继承性的特点,可以提高模型的准确性和稳定性。笔者认为通过这种方法来实现三维仿真更加有利于所建立模型的精确性和持久性。

一、三维动画仿真系统的整体分析

采用面向对象的方式对三维动画进行仿真,首先就要考虑到对于用户直接感受到的系统图标显示是否清晰,含义是否明确,这样可以使用户在进行操作的过程中获得更好的用户体验,方便快捷地实现三维动画的仿真,所以对于面向对象的三维动画仿真的实现从第一步就是合理清晰的图标设计,选择适合的程序设计语言,方便用户的使用和更改。一般的三维动画都需要花费很多的人力物力财力,很多时候就算投入了大量的精力也会失败,这就需要分析员有一个良好的心态,在进行分析之前要调查研究三维动画实现所需的地理环境、风向、设备性能等因素,考虑到可能发生的一切状况,注意保护设施的设置,在系统中划分主要功能模块,可以有参数设置、仿真计算、三维动画以及数据分析等模块。分析员要重视参数设置,参数设置是连接仿真与三维动画的主要接口,通过基于对象改变参数可以实现各种情景的设置,预防进行仿真时可能发生的意外情况,提高仿真分析成功率,进而选择最有可能成功的仿真分析方案。仿真计算过程要尽量准确,能够计算并生成相关数据文件,三维动画能较为贴切的反映出动画的演示过程,实现较高的真实性,得出的结果也更加有说服力。数据分析通过输入仿真计算生成的数据,得出准确的动画仿真过程,比如一些动画对象的速度,需要改变的位移和需要改变的部分等。数据分析也为参数反馈提供了重要依据。

二、三维动画实体模型建立

在这里研究的基于对象的三维动画仿真的分析是由C++程序设计语言开发使用的,主要使用的基本环境是Windows系统,运用C++程序设计语言编写一些需要的程序,实现所需的功能,三维动画使用的是Microsoft公司的Direct X9.0开发包。在刚开始要创建功能完整的窗体,这是实现面向对象的基本,也保证系统能够实现必要的功能,并且方便客户理解学习和修改完善,创建窗口有几个比较固定的过程,首先是设计窗口,比如窗口的颜色和图案等,一般情况下我们不需要设置太多的属性,因为窗口的属性很多都是默认的,但是为了实现个性化的需求,我们有时候也会在这方面下一番功夫。第二步就是注册窗口类,并对其进行设计,调用函数之后便可以生成我们所需要的窗口了。窗口生成完毕我们就应该创建程序框架,输入代码后进行对象初始化,然后再输入所需要的代码,并将其通过连接器导入系统,用3ds MAX制造出三维模型,运用插件导出模型,生成可以导入系统的文件后导入系统,再对模型进行一些参数设置使其符合要求,就可以实现整体模型的创建。

三、仿真计算与数据分析的实现

仿真计算是数据分析的基础,进行仿真计算时参数的获取是关键步骤,将参数输入文件后,使得实体动画开始进行运转,并将动画过程分成不同的部分分开计算与记录,这样可以提高效率,降低仿真过程计算的出错率,结束后仿真计算得出的数据可以导入数据分析模块进行历史记录的总结,以便于改进仿真结果。最终实现三维动画,有很多种方法,最常用的有帧动画、变形物体动画、过程动画、关节动画、人体动画等。对于面向对象的三维动画实现要根据不同实体模型的特点,采用不同的实现技术,三维动画最后通过实体模型的建立并转换成相应的格式文件后编写程序得以实现。

四、结语

在计算机技术日趋成熟的现代,面向对象的三维动画仿真分析已经能够充分实现,而且实现的方法也有很多,但是在这个过程中仍然存在很多显而易见的问题,就是程序员在设计时受到Windows这个大环境的限制,不能很好的实现面向对象的优点,因为我们知道面向对象的仿真分析让很多不懂编程的人能够方便地实现自己的操作,也使这个过程变得简单易懂,但是如果用户需要改变其中的某些功能,这个时候仍然需要专业计算机人士进行修改,同时程序语言的编写也限制了各种语言的相同,不同的程序员对于不同的仿真过程也有一定的限定,这也就局限了面向对象的优势,这一点也是广大计算机研究人员需要解决的问题。本文是基于对象的三维动画仿真系统,通过对三维动画仿真系统进行整体框架的分析,主要是将面向对象与三维动画仿真相结合。充分借鉴前人于这个领域的研究结果,同时将这些研究成果应用到本文中,促进三维动画仿真系统的不断进步,实现基于对象的三维动画仿真分析。

参考文献

[1]陈先国,向忠祥,崔承根.面向对象三维动画仿真的实现[J].计算机仿真,1997.

[2]肖沫.物资空投三维动画仿真系统的研究与实现[J].华中师范大学,2011.

对象实现论文 第5篇

大学的学院太多了?

会上,经济学家张曙光痛斥“市场化的扭曲腐蚀了学人的灵魂”:“我们现在的教育、学术还没有摆脱权力的掌控,又落入了金钱的奴役和驱使之中。现在的教学也好、研究也好,只要你不对现行的意识形态提出质疑,你可以不择手段去追求经济效益。所以,我们现在的教育和学术环境我觉得是相当恶劣的一件事情。”

“第二,我们的学校官僚化。学校不是教育家、学问家在治理,而是官员在治理。学校里面的很多领导我觉得很官僚,很多真正的学问家、教育家被边缘化,因此出现了很多‘学官’和‘官学’。还有,我们的知识生产工厂化。有教授曾经说过学校不是养鸡场,但实际上我们的学校已经变成了养鸡场,主管部门变成了发包商,导师变成了承包商。我们只有知识,没有文化。”

华东师范大学教科院院长丁钢教授认为,只有反思从人才内涵和培养机制以及其背后的制度文化原由,我们才不至于仅仅停留在现象的分析。丁钢说:“目前,我们大学里的学院数量过多,这容易造成各学科专业之间相互独立。每一个院系都是一个相对独立的堡垒,堡垒越多,壁垒就越深,而壁垒越深,合作的可能性就越小。这就是我们现在还没有建立一种合理的人才培养机制的原因之一。中国的人际关系是‘三个和尚没水喝’,似乎中国人缺乏人际合作的可能。其实,关键是三个和尚是各自完全分隔的利益个体还是之间存在利益关系,体制和机制是用来调节人与人和机构与机构之间的利益关系的,只有既关照每个个体或机构的利益,同时又考虑到个体和机构之间的分工合作的利益关系,这样的体制和机制才能形成‘众人拾柴火焰高’的局面。”

香港中文大学校董、香港教育研究所所长卢乃桂则提出了教育中的“不开心”问题:“2003年美国《时代》杂志做了一个很特别的报道,提出个问题:为什么这些亚洲的孩子不愿意上学?每一次香港有台风,不用上学,我自己的孩子会特别活泼、特别开心,为什么他们都不想回学校?学校本来是让人发挥所长的地方,为什么会变成这个样子?我们真的是要问自己这个问题。”

学生不是教育的对象

在不断进行的教育改革中,中国大学的自主权逐渐觉醒,但在大学自主招生之后,它们还需要做哪些观念的转变呢?

云南大学高等教育研究院院长董云川教授认为,学生不是教育的对象,而是服务的对象。董云川说:“大学生是成年人,已经不是简单的受教育对象,大学教育活动由师生双方协同共生,因此,大学生其实是教育活动主体之对应方,而非上下位被动接受‘教育’的一方。在中国,好学生的标志之一是‘听话’,教师被视作当然的教育者,是上位概念,学生是当然的被教育者,是下位概念。孟子‘得天下英才而教育之’,明示了‘我’教育‘你’之快乐。其实,教师在教育过程中不仅仅是个说教者,更主要的是一个‘帮助他发现自己’(伽利略语)的参照系。”

相对于现今教育界炒得火热的“创新”,董云川反而认为,创新不是教育质量的关键,返璞归真才是当务之急,那么,“返璞归真”指的是什么呢?

董云川解释说:“许多大学在创新的大箩筐工程中盛入了许多闲杂事务,那些本该做到位而没有做到位的事情今天统统都被纳入创新工程,而且不断被‘深化’着。我的疑惑是,真有那么多的创新吗?如此价值判断使得人们误以为,中国大学的教育品质不高是因为创新不足。其实不然,中国大学的质量问题根本上是因为基础不实,不守学问之规矩,既不能够、又不安心提供足额到位的教育服务所至。也就是说,该做的事没有做好,而乱麻麻地去做了一些不该做或者暂时不必做的事情。”

中山大学教授夏纪梅则认为,中国的大学还需要减负。“中国是世界上博士最多的国家,却又是大学毕业生获‘诺贝尔奖’为零的国家;是世界上出国留学生最多的大国,却又是接受外国来华攻读专业留学生的非热门国家。所以,可以说中国是教育大国,但还不是教育强国。我国基础教育累死人,高等教育闲死人,这种状况和美国相比,正好相反。所以,中山大学率先在国内提出‘基础教育要减负,高等教育要增负’。”基础教育累死人,高等教育闲死人,这确实是让当今很多学生和家长最为头疼的中国教育现状的真实写照。

教育的公平性待关注

“我关心什么事情呢?我关心6000万的留守儿童问题。”信孚教育集团董事长信力建在发言中说。信力建认为,由于户籍问题的限制而影响到孩子们接受教育的权利,这是很不应该发生的事情。“6000万的留守儿童没有家庭教育,也缺乏学校教育的话,将来有可能成为这个社会最拖后腿的一个问题。统计数据表明,城市的刑事犯罪有50%来自于农村,其中50%来自于年轻人,我觉得这非常值得所有的教育工作者、教育行政领导和研究人员探索的问题。8年前北京市一年级入学学生从16万减到8万,广州现在户籍出生人口和非户籍出生人口1:1,50%是非户籍人口。如果我们固守户籍人口才有权限读书的权利我觉得非常不应该,因为本身中小学的学位是有富余的,如果我们不拿出来帮助穷地区,或者帮助常住居民的话,我觉得这是极其不道德的。”

首都师范大学特聘教授、教育专家劳凯声教授也认为,有一件事情是互为因果的,人们都说教育会产生社会的不平等,这种不平等又会反过来加剧教育的进一步不平等。这就是现在教育问题的所在。同时劳凯声也认为,教育改革中的腐败也是亟需重视的问题。很多人都把腐败看作改革的伴生物,是改革必须付出的代价。如何能够建立一种有效的机制,来遏制改革中可能出现的腐败问题,这是当前教育体制改革中非常突出的一个问题。

对象实现论文 第6篇

企业集团是社会化大生产高度发展和市场经济向纵深方向发展的产物。日本学者全森久雄在其1986年主编的《经济词典》中将企业集团定义为“多数企业互相保持独立性并互相持股, 在金融关系、人员派遣、原材料供应、产品销售、制造技术等方面建立紧密关系而协调行动的企业群体”[2]。用科斯的交易成本理论来解释, 不同类型企业集团形成是因为有不同的动因。为了获得规模效益, 所以有了单一行业企业集团;为了降低交易成本, 所以有了纵向一体化的企业集团;为了共享关键资源, 所以有了横向一体化的企业集团;为了分散投资风险, 所以有了非相关多元化企业集团。这是从供应链视角———产业结构来分类的。此外, 由于企业集团内部产权关系的重要性, 可根据母公司持有子公司的股权比重不同, 分为全资子公司、控股子公司、重大影响子公司、参股子公司和关联性公司。本文研究对象为基于供应链的企业集团, 狭义上来看, 即纵向一体化的企业集团———从供应商到制造商、分销商、零售商直到最终用户一个整体的功能价值链结构。

一、集团财务监控对象

企业集团财务监控是指在产权基础上产生, 为确保企业集团整体目标的实现而实施的统一财务政策与监管活动。企业集团同单一企业相比存在着较复杂的多层次委托代理关系。代理关系是一种契约, 在这种契约下, 委托人授权代理人为他们的利益而从事某些活动, 代理人在进行受托活动中得到一定的报酬。在一个信息不完备的经济环境中, 委托双方拥有的各种信息是不对称的, 而且二者的目标有时是不一致的。从经济人的角度出发, 代理人并不总是以委托人的最大利益作为自己的行为准则, 因此有必要对企业集团财务活动进行监控, 防止下属公司偏离财务战略的既定目标而使企业遭受损失, 确保集团协同效应, 从而保证其抗风险能力。集团财务监控还是其内部控制的一个重要方面, 影响着企业集团的整体实力。

一直以来, 大多数企业集团只注重财务方法而忽视了财务管理的监控对象。面对众多的财务管理方法, 如果实施过程中要监控的对象不明确, 必然导致财务管理的失效。

一些学者认为, 企业集团财务监控目标与企业集团目标应当一致, 都是集团价值最大化。即监控对象是其价值。集团以企业集团价值作为监控对象, 最大的问题是计量问题。按照拉帕波特的价值理论:

式中, TVa表示持续经营的公司价值;FCFt表示在时期内企业自由现金流量;Vt表示t时刻公司残值;WACC表示加权资本成本。

不难看出, 企业总价值TVa与自由现金流量FCFt同方向变化, 与加权资本成本WACC反方向变化。也就是说, 企业集团价值与预期收益正相关, 与预期风险负相关。只有在风险和收益达到均衡时才能实现企业价值最大化这一财务监控目标。对于企业集团, 首先, 由于其多层次多方面的业务活动, 这个模型中现金流量的确定比较困难。其次, 集团公司必定拥有不同行业、不同主营业务的子公司、分公司, 各个行业所面临的风险的差异使得必要报酬率 (加权资本成本) 肯定存在差异, 若采用单一的必要报酬率来计算, 则得出的企业价值一定不准确;若将各子公司的价值相加得出企业集团的整体价值, 那么又忽视了集团作为一个整体的协同效应, 还可能导致各子公司、分公司抢夺财务资源, 追求自身价值最大化, 置集团利益于不顾。因此。集团价值作为监控对象可操作性不强, 而且属于事后控制。

从广义上来理解, 企业是社会的, 所以其价值不仅表现在对企业本身增值的作用上, 还表现在对社会利益的贡献上, 于是出现了“相关利益者利益最大化”这一概念, “这样说无异于推卸责任, 将这个目标放到一个只能在理论上讨论而在现实中无法应用的地步”[3]。对于“相关者利益”这一监控对象, 王化成博士提出了“薪息税前盈余”的指标, 该指标充分体现了“相关利益者”的利益, 包括职工、债权人、企业所有者。在理论上可以理解, 在实践中也有确定的数字, 具有可操作性。然而, 单纯的薪息税和净利相加得出的“薪息税前盈余”同样受到风险程度不同的制约, 它没有考虑各种利益相关者与企业相关程度的差异以及各成员所冒风险的大小的差异 (对企业集团来说也是如此, 甚至存在的差异更为复杂) 。这就是将相关利益者作为监控对象的不足之处。

其实, 企业财务管理监控对象由“利润”、“股东财富”、“企业价值”到“相关者利益”, 一直在不断地挤压利润空间, 无法寻求改变和突破。更何况, “价值”本身离不开整个市场对企业的评价, 这涉及消费者心理等主观因素, 带有很大的随意性, 并非企业所能控制的。把不可控因素纳入目标体系中显然是不合理的。

为此, 笔者认为可以绕开利润利益层面, 从价值链的角度来确定企业集团财务管理的监控对象。整个企业集团的价值链与本金流互相依附, 本金运动应当是周而复始并且不断增值的, 本金流的运动是企业的生命力所在。故本文认为应当以本金流作为企业集团对下属公司的财务监控对象。本金流结合信息流反映的是整个企业集团的业务流, 它以物资流为载体和表现形式, 贯穿于集团内部供应链的始终。郭复初教授论述, 从本金所有看, 资本金、借入本金和内部积累本金之间要有恰当的比例关系, 才能使筹资成本与筹资风险较好地统一。从本金运用看, 对内投资和对外投资之间、长期投资与短期投资之间、固定资金与流动资金之间都必须保持恰当的比例, 才能达到“本金的内部综合平衡”。

集团通过对子公司筹资、投资、利润分配活动中本金的管控, 能够从源头上对子公司进行控制, 因为子公司的任何财务活动都离不开资金的支持。以集团公司的本金流为监控对象, 了解动态完整的资金信息, 可以控制委托代理双方目标的一致性, 使委托人的利益得到保证;有利于避免有限资源的浪费;有利于集团规模效应和协同效应的发挥, 从根本上控制风险。

二、集团财务监控目标:本金流的高效有序

集团财务监控更应关注供应链的动态协同。毕竟企业集团以生产、经营、管理和资产为纽带把众多的企业联系在一起, 适应社会主义市场的要求, 其本身是个复杂的联合体。要使企业集团运行的“组合效应、规模效应、放大效应和整体效应”[4]得以发挥, 完善的企业集团财务管理体系十分重要。“完善”在这里是指能够统一调拨集团资金, 减少沉淀资金, 杜绝资金短缺, 使集团资源在横向各机构和纵向各业务间实现最优筹集、最优配置和最优循环。并且要能通过内部转移价格的设计调整集团整体税负, 通过透明化的资金运行提升管理水平, 防范风险。澳大利亚的约翰·加托纳教授提出了“动态协同的供应链”这一概念, 他认为, 产品并不是在一开始就可以在供需两端完美移动的。本金也是如此, 它不会自发地在企业集团的整个价值链上连续、继起地运动, 我们要通过有效的集团财务管理使其“完美”地流转, 将有限的资源管理拓展成高度集成的价值链, 塑造集团的整体竞争力。整体竞争力能够保证集团平衡持续地发展, 强调的是协同效应。构成价值链的成员越多, “偏离合作的可能性就越大, 有效的合作活动就变得越困难”[5];然而, 可能达到的协同程度也越大, 发展的空间也越大。

为此, 本文认为企业集团财务监控目标应当定位于本金流的高效有序的运动。资金是企业的血液, 分布于企业集团的采购、生产、销售各个环节, 渗透至企业集团的每一个组织层面, 资金运作贯穿于企业集团生产经营管理的全过程, 其运动的高效有序是集团得以生存发展的保证。而在资金中, 除去无增值性的基金, 可增值的本金无疑是企业集团创造价值的源泉。郭复初教授等人认为“本金为生产经营活动而垫支”, 垫支的含义是本金本身不随生产经营的物质消耗而消耗, 它按耗用的多少计入成本费用, 并随生产经营收入的取得而得以补偿, 从而全部收回。本金流转贯穿于企业整个经营过程, 是资产、负债、所有者权益变动的最终表现形式。财务管理的主要内容即资本管理[6]。企业集团由于财务主体多、经营领域广、内部关系复杂、本金流量大, 本金管理更具复杂性。本金的运动与企业集团的经营管理状况密切相关, 使本金保持在高效有序、动态平衡的状态至关重要。有学者指出, “本金流是本金以不同形态在企业连续、继起的不间断周转所形成的一种运动状态和过程”[7]。在这个过程中, 企业只有在每个继起的时点获得更加充裕的本金———本金的保全和增值, 才能获得持续发展的生命力。

“高效有序的本金流”是个抽象的概念, 看不见也摸不着, 但是笔者试图通过本金流的载体将其具体化。本金运动体现在整个企业集团成员的业务活动中, 更具体地说就是在物资运动中。我们可以通过管理好物资而从根本上控制好本金流。财务管理中注重资金的充分利用———保持适当的资金头寸, 缩小闲置资金的规模。前者可以保证企业集团应对偶然事项和进行一些投机活动的能力, 后者是从货币时间价值的角度摒弃浪费。在投入本金时, 还要考虑到投入的结构问题, 不仅要关注本金在各经济主体间的比例, 还要关注本金在各项业务中的分配, 在平衡好各子公司关系的同时也要协调好各项业务活动, 把握好优先权 (priority) 。对基于供应链的企业集团来说, 从供应商的供应商到顾客的顾客整条价值链的各方面都要予以关注。因为“木桶原理”告诉我们, 集团承受风险的能力取决于最薄弱的环节。

笔者认为, 可以用一个经济学名词来描述这种理想的本金流运动状态———高效有序, 即“帕累托效率”。在对社会资源进行配置时, 若资源的重新配置在使一部分人境况变得更好的同时使得另一部分人境况变坏, 则原有的资源配置是最佳状态。以“帕累托效率”为衡量标准, 当企业集团的本金在整条供应链上运行, 如果改变某个环节的资金占用量将会使一部分成员的利益变大、另一部分成员的利益变小, 那么集团原来的本金流就是“高效有序”的 (鉴于这有种“事后”的意味, 管理中的假设和模拟是必要的) 。

三、集团财务监控目标的实现机制

企业集团从构建动态协同的供应链角度创造自身价值链, 利用经济杠杆和信息杠杆追求本金流的高效有序运动, 有效的财务治理是不可或缺的。威廉姆森对组织的一体化尤其是纵向一体化 (基于供应链) 进行了详细的论证分析, 在他构建的基本体系中, 有限理性, 交易环境的不确定性, 机会主义倾向, 可供选择的厂商数目过少和专用性资产的存在等5个因素导致“交易成本”顽固地存在于企业集团的供应链中。在对集团财务进行管理的过程中, 降低交易成本是一个重要的方向。此外, 降低协调成本是与之相当的另一个要点。用汤普森的观点来描述企业集团下属各成员间互相联系互相依赖的关系, 有无依赖 (pooled) , 顺序依赖 (sequential) 和复杂依赖 (reciprocal) 。就基于供应链的企业集团而言, 横向来看, 资源共享;纵向来看, 上游供应商的产出是下游购买方的输入, 资源由价值链的一方向另一方转移。更深层次来看, 集团各成员为了实现更有效的研发和创新, 成员间的活动互为输入, 资源多方向流动, 依赖关系复杂, 导致繁重的协调成本。

企业集团的财务治理是通过选择和使用特定的治理机制来实现财务监控目标的过程。因此, 要获得高效有序的本金流, 就要对本金流所依附的供应链进行有效治理。国内外相关研究支持以下两种价值链 (包括供应链) 治理机制:基于契约的正式治理机制和基于信任的社会治理机制。契约注重个体间的相互监督和控制, 信任则更多地关注依赖和合作。针对企业集团这样的大型组织, 应当建立一个以信任为基础, 以契约为保障的财务治理机制 (强调“私人秩序” (private order) 和“自我加强” (self-enforcing) , 以“第三方权威”为控制底板) 。“日本汽车制造企业所构建的供应链几乎达到了只有在完全信息条件下零交易成本的状态” (1) , 其主要原因就是上游供应商积极地向下游企业提供了自身完整的信息, 这无疑发生在ERP系统的支持下, 但是剖开技术层, 一定是密实的信任基石铺垫在供应网络的每个角落。我们需要充分的信任, 却不可订立完备的契约 (2) 。契约存在的必要性在于经济人的“有限理性”和环境的不断变化。有效的治理机制会构建出健康的供应链, 促进达到本金流的高效有序这一集团财务监控目标。

1. 以集团ERP系统建设为平台

企业集团财务管理涉及的一个重要方面就是集团资源的整合和优化, 集团财务监控目标的实现需要高度的信息化, ERP (企业资源计划) 为集团财务管理的实施提供了一个良好的平台。ERP由MRP (物料需求计划) 和MRPⅡ发展而来, 是一种可以提供跨部门跨地区甚至跨公司整合实时信息的管理信息系统。由于ERP实施的是以客户为中心的战略, 故ERP的基本思想应该是将企业整个业务流程看作是包括供应商、生产者、分销商和客户在内的高度集成、紧密连接的供应链, 将企业内部划分成几个相互协同作业的支持子系统, 监视各部分的业务流程情况, 反映到财务层面上, 即本金流状态。

ERP系统充分体现了企业生产过程中实物形态和价值形态的必然联系。ERP的建设有助于集成企业集团内部供应链, 优化资源配置, 为企业集团与外部相关者建立动态联盟、与银行直接对接等系统管理奠定了坚实基础。ERP是个实时 (real time) 系统, 它能快速高效整合集团内部资源, 大大提高财务监控目标实现的可能, 快速应对外部环境的变化, 避免反应时间过长给财务监控目标实现带来的负面影响。ERP是财务管理实现控制一体化重要平台, 最直接的表现就在于对物流、资金流、信息流的一体化控制。其应用有助于企业集团建立决策完善的数据体系和信息共享机制, 可以有效防止信息孤岛现象, 促进集团内外资源的整合, 获得协同效应, 提升整体竞争力。如果失去ERP系统这个优质管理平台, 那么由于信息管理的时滞性, 财务管理缺乏强有力的控制, 信息的不透明和不对称将严重阻碍本金流“高效有序”地流转。

2. 以集团财务预算为实现工具

韩颖以预算管理拯救了亚信, 当选为2000年度“亚洲最佳CFO”。从纵向角度, 预算通过增设费用明细科目, 把费用管理精细化;从横向角度, 预算将费用归口落实到部门, 设置“部门项目辅助核算”。它是集团财务管理的重要工具。企业集团的资金运转关系到资金来源、资金投向及资金分配等问题。在投资方向的选择上, 财务管理要评价投资项目的可行性和经济效益以及投资主体可承受的风险程度, 为决策提供依据;在日常运营中, 财务监控目标应当被细化为一定期间的财务计划, 预算就在这两者的基础上产生了, 对已选定的投资方案和日常财务计划统一以货币的形式进行综合和概括, 借以综合反映企业在一定时期内所应该实现的目标和任务。另外, 本金的“内部综合平衡”也要求财务管理要贯彻计划性。企业集团财务监控目标, 呈现为集团财务公司有机统合各个体的财务监控目标, 发挥较大协同效应, 以高效有序的本金流提升竞争力。财务预算管理, 就是将企业集团财务监控目标及其资源配置加以定量化并使之得以实现的内部管理活动和过程。在企业集团内部实行预算管理, 进行短、中、长期的资金预测和资金调度, 不仅可以提高管理效率, 优化资源配置, 而且有利于明确母公司与子公司各自的责权利, 实现集团的整体战略目标。集团预算直接服务于企业管理层, 协助集团领导进行管理决策达成财务监控目标。

3. 以内部控制为管理重心

安然帝国梦的破灭, 巴林银行的破产以及“中航油事件”, 缺乏强有力的内部控制是其主要原因。“得控则强, 失控则弱, 无控则乱”。2002年7月26日, 美国国会以绝对多数通过了《萨班斯-奥克斯利法案》 (“SarbanesOxley Act”) 。此法案的核心条款404强调了管理层对内部控制的评估。企业要想有效监管自身的财务状况和经营状况, 一定要建立一套完善的内部控制制度, 进行风险管理。

企业的资源永远是有限的, 对资源的控制和保护对于企业生产循环的顺利进行和持续发展至关重要。从这一点出发, 内部控制是一种治理, 这种治理需要结合企业自身的组织结构、管理层特性、市场环境、资源优势, 来进行目标设定、事项的识别、风险评估、控制活动、沟通信息和监控。推广到企业集团, 笔者认为这10个内部控制要素的内涵体现在: (1) 责任和权利相结合管理, 确保子公司和其他机构的责权明晰; (2) 企业集团 (母公司) 的高级管理团队应当根据集团公司各下属成员的不同背景和特性考虑其风险承受能力, 不能一味采取“冒进”或“谨慎”态度; (3) 联系行业现状、国家政策、法律规定进行相关管控活动; (4) 集中利用关键资源发展核心业务, 适度外包 (outsourcing) 其他业务; (5) 将内部控制目标与各子公司的任务或预期相联系, 并同集团总的风险偏好保持一致; (6) “事项是源于内部或外部的影响战略实施或目标实现的事故或事件”[8], 其影响可能是正面的, 也可能是负面的, 这就需要实施内部控制时关注并透彻分析各成员所受的影响以及事项对集团公司未来的持续性影响; (7) 风险无处不在, 企业集团在规模、结构、性质、所属行业等多个层次上的复杂性要求其对面临的风险进行定量和定性的分析, 考虑风险在集团内部成员间的相互抵消或增长, 从整体上评估风险明确并实施应对风险的控制活动, 管理好集团各个层面上的风险; (8) 管理各子公司包括下属公司资金借贷规模和负债比率的业务活动, 控制各种实体安全, 比较各成员业绩, 进行合理的职责分工; (9) 与供应链中的供应商、分销商、消费者等和供应链之外价值链之内的政府机关、外部审计人员等进行有效的沟通, 促进各种资料转换成正确有用的信息, 在ERP系统的支持下保证及时的信息源, 获得尽可能完整的信息; (10) 所有的制度不执行就不会有结果, 执行却没有监控就不会有很好的作用。企业集团对内部控制的监控应当是持续的、全方位的。成员间的彼此监控和对“缺陷”的报告也能提高内部控制的效果。

4. 以本金流管理为关键控制点

美国COSO《企业风险管理———整合框架》中指出, 风险管理各要素来自管理层经营企业的方式, 并融入管理过程本身。“内部控制与经营管理科学融合才是内部控制的最终目标, 以业务流程为线索的内部控制设计促使内部控制在全局上系统上的功能发挥”[8]。企业集团各子公司的业务过程和业务性质都不同, 其风险控制必然有差异, “然而, 业务的逻辑顺序, 资源配置重点业务运行舞弊频发点都有共同的规律”。科学的内部控制设计可以使企业内部控制事半功倍, 抗风险能力大大提高。这样分析, 不难得出, 业务流程再造 (Business Process Reengineering, BPR) 是企业内部控制的有效方式, IBM、Kodak、P&G、GM都是业务流程再造实施成功的典范。有学者提出, 业务流程再造的财务层面即本金流再造[7]。得益于这一思想, 从财务的视角分析, 笔者认为, 将企业集团的财务活动嵌入 (embedded) 到业务活动控制将会得到很好的效果。深入一点, 企业集团的风险识别焦点可以从业务运作系统中转移到财务管理 (本金运动状况) 系统中来。这样, 通过资源是否在集团各成员间合理配置, 资金头寸是否适合企业发展需要, 闲置资金是否得到有效控制等与可增值的本金的流程、流量、流向、流速有关的信息可以直接有效分析现状, 进而实施管理控制使本金流“高效有序”, 而这一财务监控目标是服务于资本持续增值的总目标的, 可以有效控制企业风险, 实现企业增值。

参考文献

[1][英]尼科·默克基安尼斯.企业目的:伟大公司的起点[M].曾琳, 译.北京:机械工业出版社, 2008.

[2]王斌, 张延波.企业集团财务[M].北京:高等教育出版社, 上海社会科学院出版社, 1999.

[3]马忠.公司财务管理:理论与案例[M].北京:机械工业出版社, 2008.

[4]王浩明, 张翼.集团企业资金管理[M].北京:清华大学出版社, 2006.

[5]郭天明.基于价值链的公司价值创造研究[M].北京:经济科学出版社, 2008.

[6]郭复初.财务通论[M].上海:立信会计出版社, 1997.

[7]王锴.财务视角中的本金流再造[J].经济理论与经济管理, 2007 (11) .

对象实现论文 第7篇

关键词:锥NAT,UDP穿透,面向对象,C++

1 NAT概述

NAT (Network Address Translation, 网络地址转换) , 提供了私有网络内部主机与Internet外网主机连接通信的方法。简单说, 就是若干台主机组成的内部专有网络 (局域网) 与Internet外部主机建立联系的方法。装有NAT软件的路由器被称为NAT路由器, 它将外部全球唯一的IP地址转换成多个内部私有IP地址。在合法网络IP地址日益稀少的今天, 使更多私有主机访问Internet成为可能。

2 NAT特性

(1) NAT设备 (NAT, 一般被称为中间件) 将内部私有网络与外部网络隔离开来, 并且让内部主机独立使用一个IP地址, 同时为每个连接动态翻译这些地址。除此之外, 当内部主机和外部主机通信时, NAT设备必须要为它分配唯一的端口并连接到同样的地址和端口上 (目标主机) 。

(2) NAT只允许从内部 (私有网络) 发起的连接请求, 它拒绝了所有不是由内部发起的连接请求。

3 NAT分类及穿透策略

要实现NAT的穿透, 就必须全面了解NAT有哪几种类型, 针对各自类型如何进行穿透。NAT从不同角度可以有不同的分类, 我们讨论的是NAT的穿透, 所以, 从实现的技术角度, NAT总的分为两大类:锥NAT和对称NAT。锥NAT又可以细分为三个类型:全锥NAT、限制性锥NAT、端口限制性锥NAT。类型不同, 穿透的情况有所不同, 下面来分别探讨:

3.1 全锥NAT

全锥NAT是把来自相同内部IP地址和端口的请求映射到相同外部IP地址和端口。任意一个外部主机均可通过该映射发送信息到该内部主机。前面讲NAT有一特性, 它拒绝所有不是由内部发起的通往外部的连接。全锥NAT是一例外, 从外部主动发来的连接, 它不会拒绝, 所以, 穿透这类型NAT最为容易, 只需要获取内部主机对应的外部IP和端口号, 便可以直接发送信息到该内部主机。

3.2 限制性锥NAT

限制性锥NAT是把所有来自相同内部IP地址和端口的请求映射到相同外部IP地址和端口。和全锥NAT不同的是, 只有当内部主机先给外部主机发送信息后, 该外部主机才能向该内部主机发送信息。也就是说, 不请自来的信息, 该类型NAT会毫不犹豫的丢弃, 所以我们假设两台都处在各自不同局域网内部的主机A和B, A单方面向B发送信息, 就会被B局域网NAT丢弃, B单方面向A发送信息, 就会被A局域网NAT丢弃, 导致连接失败。

3.3 端口限制性锥NAT

端口限制性锥NAT与限制性锥NAT相似, 只是多了个端口号的限制, 即只有内部主机先向外部地址:端口发送信息, 该外部主机才能使用特定的端口向内部主机发送信息。该类型NAT的穿透比限制性锥NAT的穿透多了个端口号的限制, 所以穿透了该类型NAT, 限制性锥NAT也自然会穿透。

3.4 对称NAT

对称NAT情况与上述3种类型都不同, 当同一内部主机使用相同的端口和不同地址的外部主机进行通信时, 对称NAT会重新创建一个Session, 为这个Session分配不同的端口号, 也就是说, 当一个私网内主机和外部多个不同主机通信时, 对称NAT并不会像锥 (Cone, 全锥, 限制性锥, 端口限制性锥) NAT那样分配同一个端口。而是重新建立一个Session, 重新分配一个端口。因为端口号的不确定, 所以穿透该类型NAT的机会很小。目前绝大多数NAT都是锥NAT, 锥NAT的穿透也是本文讨论的重点。不过, 仍有两种方法有可能穿透对称NAT:同时开放TCP、UDP端口猜测。这两种方法 (包括TCP穿透NAT尝试) , 将在以后的论文中探讨。

4 面向对象封装UDP穿透NAT技术实现

面向对象是当今软件编程的主流技术, 它为软件工程的开发提供了相当大的便捷, 也给当今软件产品的丰富多彩奠定了基础。运用面向对象技术可以使你的代码异常的清晰明了, 也给代码的移植和重用提供了相当大的便捷。本文使用面向对象的方式实现了锥NAT的穿透。因为是面向对象的实现方式, 所以可以很容易的将代码嵌套到其它的软件工程中去, 为点对点通信提供了便捷。

本文使用的编程语言是C++, 该语言既兼容了C语言面向过程的特性, 又涵盖了面向对象的所有特性, 本文使用后者。传输协议使用的是UDP协议。实现点对点的NAT穿透, 需要一台中间服务器来协助打洞, 服务器端代码需实现的功能较为简单, 所以, 我们先从服务器端开始。

既然是面向对象, 首先我们需要自定义一个类, 将所有需实现的功能封装到该类中, 以便以后的调用, 假设类名为:NAT_UDP_SERVER, 该类所有成员的声明放到名为NAT_UDP_SERVER.h的头文件中, 所有成员函数的实现在NAT_UDP_SERVER.cpp文件中。以下是该类所有成员的声明:

这就是面向对象的好处, 我们可以一览它的全貌, 包括这个类有哪些数据成员, 成员函数大概都做些什么 (从名称上可以略知一二) , 简单的说, 服务器所要做的一是监听各个客户端 (内网或外网) 发送的所有的连接请求, 二是在必要时候, 需要转达给某个客户端其它客户端的一些节点信息 (外网IP和端口) 。

声明中的Socket又称“套接字”, 应用程序通常通过Socket向网络发出请求或者应答网络请求。这里不再详述。成员函数void Init Win Sock () 和void mksock () 做了socket的初始化工作, 函数void start_bind () 将“套接字”绑定到固定端口上, 为监听做好准备。

类NAT_UDP_SERVER最重要的函数是void startlisten () , 该函数启动了监听程序, 并使用switch语句中创建的子程序来处理接收到的数据包, 关于数据包的格式, 本文自定义了几种数据结构 (NAT_UDP_SERVER.h头文件中) , 以方便信息的传递, 这里列举一例:

结构体MESSAGE中包含了信息类型、注册成员信息、注销成员信息、打洞成员信息。嵌套的结构体的详细信息会在完整代码给出, 这里不再一一列举。

服务器端需要拥有一个固定的外部IP及端口, 以方便其它外网客户端的连接, 需要实现的功能是, 当多个外网客户端节点连接到该服务器时, 服务器需将各个节点信息 (外部IP及端口) 记录下来, 当节点A想直连节点B, 服务器需将A节点信息发送给B节点, 再将B节点信息发送给A节点, 当A节点和B节点都拥有对方节点信息后, 便具备打洞条件。前面介绍过, 在锥NAT中, 端口限制性锥NAT是最为严格的锥NAT, 一切不请自来的信息均会被抛弃, 只有内部主机主动连接外部主机后, 外部主机发送过来的信息才会被放行。本文使用的NAT穿透技术, 简单讲, 就是打一个时间差, A节点发送数据包到B节点, 会被B节点NAT丢弃, B节点此时虽然没有收到任何信息, 但如果B节点人为的向A节点再发送一个数据包, 那么A节点的NAT就会误认为这个数据包和刚才A节点发送出去的数据包属于同一个Session, 而予以放行。同理, A节点再发送数据包到B节点时, 也会被B节点NAT放行, 这时, A节点与B节点的直连已经建立, 穿透已经实现。

下面用代码来具体实现, 服务器端的代码主要实现的是保存节点信息和转发节点信息的功能。重点讨论一下客户端代码:

客户端自定义的类名为:NAT_UDP_CLIENT, 关于类的声明放在NAT_UDP_CLIENT.h头文件中, 以下是类声明的全貌:

该类自定义了一个命令处理函数void Parse Command (char*Command Line) , 它占据了客户端的主线程, 而客户端需要时时接收来自外部的信息, 所以需要再创建一个线程专门负责接收外部发来的信息。

直接创建线程函数很容易, 但本文是面向对象的技术实现, 一般来说, 线程函数不能作为类的成员函数出现, 我们需要将线程函数写入类中, 这里需做几个特殊处理:

(1) 将线程函数声明为static;

(2) 在该成员函数的实现里, 定义该类指针

NAT_UDP_CLIENT*p= (NAT_UDP_CLIENT*) lp Parameter, 通过该指针来访问类的其它成员;

(3) 创建线程时, 将该类定义的对象udp_client的地址作为参数传递给线程函数:

此外, 成员函数void Connect To Server (char*username, char*serverip) 实现了客户端节点连接服务器并注册的功能;而成员函数bool Send Message To (char*User Name, char*Message) 是实现打洞的关键函数, 具体步骤如下:

(1) 在函数的开始, 首先需要获得B客户端节点信息:

User IP= (*User Iterator) ->ip;

User Port= (*User Iterator) ->port;

(2) 因为全锥NAT是可以直接发送数据包被对方接收的, 所以尝试直接向B节点发送数据包:

send to (socket_UDP, (constchar*) &realmessage, Message Head.String Len, 0, (const sockaddr*) &remote, sizeof (remote) ) ;

(3) 如果没有接收到对方主机的任何回应, 表明对方使用的NAT不是全锥NAT, 此时就需要服务器的协助来完成打洞:首先向服务器发送一数据包sendto (socket_UDP, (const char*) &trans Message, sizeof (trans Message) , 0, (const sockaddr*) &server, sizeof (server) ) ;数据包的内容指令是BURROW, 目的是通过服务器告诉B客户端节点需先向A客户端节点 (本地) 发送一条信息;

(4) A客户端节点在向服务器发出请求后程序中断3秒钟Sleep (3000) , 等待对方先发送信息过来;虽然A客户端节点也不会收到任何信息, 但3秒过后, A客户端节点 (本机) 再次调用发送程序向B客户端节点发送数据包:sendto (socket_UDP, (const char*) &realmessage, Message Head.String Len, 0, (const sockaddr*) &remote, sizeof (remote) ) ,

(5) 最终, B客户端节点会显示收到一个消息:printf ("收到一个消息:%sn", comemessage) , 表明A、B节点已成功建立直连, 双方可互发信息, NAT穿透成功。

5 结束语

现实中使用的绝大多数NAT路由器均可使用本文提供的方法穿透成功, 而面向对象封装所有模块功能, 又为代码的移植与重用提供便利, 最后引入多线程机制, 又使代码实现的功能变的更加的灵活与丰富。

参考文献

[1] (美) J.D.Wegner. (美) Robert Rockell等著.赵英等.IP地址管理与子网划分[M].北京:机械工业出版社, 2001.

[2]Boulton C.Rosenberg J.Camarillo G.NAT traversal practices for clientserver SIP.RFC 6314, July 2011.

对象实现论文 第8篇

1 总体设计

系统通过浏览器进行访问的相关操作,系统界面设计遵从界面友好、操作简单、风格统一的设计原则,采用统一的界面设计框架,用户能够快速的掌握并且熟练应用。对运行环境没有特别的要求,一般的、只要能访问互联网的计算机都能够运行。因此,具有较好的可操作性。

系统可供人员使用:管理员和普通用户

首先验证登录者的身份,输入信息是否正确,然后按照登录者的登录信息划分应有的身份权限。

后台管理员主要是利用该系统完成后台的管理工作,具体包括:

1)对部门进行管理,对部门、部门的名称、部门的负责人进行添加、删除、修改等功能。

2)对职务进行管理,对部门内的职务进行添加、删除、修改等功能。

3)对岗位进行管理,对岗位进行添加、删除,并能对岗位的具体职能进行修改、删除等。

4)对用户短信进行管理,其中包括两个小的模块:用户短信和短信管理。

用户短信包括对个人基本信息的添加、修改、删除等。

短信管理是管理员通过该平台对普通用户发送短信,通知单位的相关事宜。

5)对任务进行管理,其中包括四个小的模块:年度考核任务、任务添加、任务类型、任务维护。

年度考核任务是对年度任务进行考核,使得大家更积极的工作,更能明确奖惩的目标。

任务添加是对任务的基本参数进行设置。只需直接选择任务的发起岗,任务的类型,而无需手动输入,简化了工作流程。

任务类型主要是对任务的类型进行介绍,管理员可以对其添加、删除、修改。

任务维护主要是对任务的发起岗位、任务类型、任务内容、任务描述作一个统一的描述。可以查看任务描述,里面有该任务的工作规程的详细说明,管理员可以修改任务的描述,直接上传word文档即可,无需要再在系统上输入,简化了工作流程。

对责任进行追究,制定相关的规定,强化职能区分,明确工作职责,激发工作热情,降低内部运行成本,提高行政效率,建立合理、责权有据的责任追究体系。

领导管理模块由非执法岗任务、岗位授权、部门统计、目标考核四个模块组成。

非执法岗任务,可创建非执法岗任务,在交代任务的人员进入系统后即可看到该任务,并按时完成任务。

岗位授权,在查询了该岗位的在职人员后,可以对该部门的人员进行授权。

部门统计,可以查看当前部门的总分,也可以选择时间段来查询部门当前的任务总分。

目标考核,主要是对任务的考核情况。包括对执法岗任务、非执法岗任务、年度考核任务的打分,只要任务完成,即可对其打分。

2 数据库设计

经过分析,本系统用户、部门、岗位、非执法岗任务、年度考核任务、执法岗任务类型、执法岗任务、任务流、职务实体之间的关系为:部门和用户、职务和用户之间是一对多的关系,用户和非执法岗任务、用户和年度考核任务、用户和岗位、岗位和执法岗任务类型是多对多的关系,执法岗任务和任务流的关系是一对多的关系,系统的实体-关系图(E-R图)如图1。

3 功能设计

通过后台管理员登录有六个模块,分别是部门管理模块、职务管理模块、岗位管理模块、用户短信模块、任务管理模块、责任追究模块。在用户短信模块中有用户管理和短信管理模块两个子功能模块。在任务管理模块中有年度考核任务、任务类型、任务添加和任务维护四个子功能模块。通过普通用户登录进入需要实现的有一个功能模块领导管理模块,有这个模块中有非执法岗任务、岗位授权、部门统计、目标考核四个子功能模块。本税务行政监管系统的后台管理平台的功能模块如图2。

通过对系统的分析,列出了系统的用例图如图3。

4 总结

本文实现了部门管理、岗位管理、职务管理、用户短信、任务管理、领导管理、责任追究七大功能模块。运用了PowerDesigner数据库建模工具,大大的节约了数据库开发的时间,并且减少了可能出现的错误。在开发中运用了模块化的思想,增强代码的可维护性,有利于团队开发,提高了代码的重用性。

摘要:在网络技术高速发展的今天,税务系统适应形势要求开展了以计算机为代表的办公自动化建设,改革传统的办公手段,实现无纸化办公。运用软件工程和面向对象技术对系统进行了分析与设计。实现了相关部门、人员、岗位、职务、任务管理、部门统计、目标考核、短信提示等功能。强化了职能区分,明确了工作职责,规范了责任追究体系。系统依托现代计算机技术与网络技术的管理理念,以优化税收管理和服务、合理配置税务资源,全力构建全新、科学、和谐的税收管理体系。

关键词:面向对象,模块化,自动化

参考文献

[1]布拉德利.米尔斯波.C#.NET程序设计[M].北京:清华大学出版社,2005:21-54.

[2]诺曼.周之英.肖奔放.面向对象系统分析与设计[M].北京:清华大学出版社,2000:68-110.

[3]陈松乔,任胜兵,王国军.现代软件工程[M].北京:清华大学出版社,2004:45-69.

对象实现论文 第9篇

关键词:GDI+,测井曲线,图形对象,设计模式

国外的测井成像技术起步较早, 其中美国在测井成像领域拥有先进成熟的技术。随着计算机图形技术在各行各业的应用, 世界各地测井解释人员及计算机工作人员开始加强对测井成像的研究。

20世纪70年代初, 我国油田内部开始使用计算机技术进行测井数据的处理和分析。在此之后, 伴随着高性能计算机和图形技术的发展, 测井绘图系统相继推出。测井解释向着数据处理、结论解释、成果图形展示一体化方向发展。国内具有代表性的解释系统有:Forward地层油气层测井评价系统, Log Vision测井分析平台。

测井解释的发展虽然已有四十年的历史, 且多数测井解释平台已经使用面向对象进行开发, 但是在二次开发和复用时, 需要付出大量时间做重复性工作。软件重用中重要的组件很少用于测井解释平台软件。因此本次设计在实现测井曲线的同时, 结合改进的抽象工厂模式和组合模式部分内容, 封装绘图组件同时方便增加新的图形类型对象 (仪器串图、地层测试成果图等) , 使系统具有较好的可扩展性、灵活性和方便性, 同时达到复用的效果。

1 相关技术

1.1 GDI+

GDI (Graphics Device Interface, 图形设备接口) 的主要任务是负责系统与绘图程序之间的信息交换, 处理所有Windows程序的图形输出, 是Windows API (Application Programming Interface) 的一个重要组成部分, 是Windows图形显示程序与实际物理设备之间的桥梁。GDI使得用户不需要注重具体设备的细节, 只需要在一个虚拟环境 (逻辑设备) 中进行操作。实现了程序开发人员与硬件设备的隔离, 为开发工作提供了便利。

GDI+是对GDI改进的结果, 在GDI的基础上优化了原有的功能, 新添加了二维矢量图形的显示、图像处理和版式处理等诸多功能, 主要负责在显示屏幕和打印设备输出有关信息。GDI+类和接口是.NET框架的组成部分。通过使用GDI+, 可以创建图形、绘制文本以及将图形图像作为对象操作, 同时软件开发人员可以使用GDI+在Windows窗体和控件上方便地呈现自定义组合图形图像。

1.2 设计模式

抽象工厂设计模式, 提供一个创建一系列相关或相互依赖对象的接口, 而无需指定它们具体的类。具体工厂类在应用中只需要初始化一次, 改变具体工厂即可使用不同的产品配置。这个模式的主要结构如图1所示。

Abstract Product A和Abstract Product B是两个抽象产品, 它们都有可能有两种不同的实现, 而Product A1、Product A2和Product B1、Product B2就是两个抽象产品的具体分类的实现。Abstract Factory是一个抽象工厂接口, 它里面包含所有的产品创建的抽象方法, Concrete Factory1和Concrete Factory2是具体的工厂。通常是在运行时刻再创建一个Concrete Factory类的实例, 这个具体的工厂再创建具有特定实现的产品对象。

2 绘图设计

首先, 根据各种图形元素的共性创建一个抽象绘图父类 (Plot Object) , 定义绘图子类的公共属性和方法, 所有绘图子类都继承该父类。Plot Object类的示意代码如下:

然后, 创建一个改进了的工厂类 (Plot) , 所有图形对象都由它的创建函数进行创建, 输入图形类型, 返回绘图父类对象。如果使用抽象工厂方法, 则需要添加抽象道工厂类和抽象曲线工厂类, 当需求增加, 则在修改已定义的抽象类同时还要添加新的抽象对象工厂类。因此本文使用简单工厂来改进抽象工厂, 只使用一个抽象工厂类Plot。Plot类的示意代码如下:

客户端使用Plot Object类和Plot类创建绘图对象, 示意代码如下:

在客户端程序中, 定义绘图对象, 通过工厂类的创建函数, 传递对象类型, 生成不同的绘图对象。通过调用相同的接口函数实现不同的绘制方法。具体设计框图如图2所示。

客户端程序无需与具体图形类打交道, 只需知道父类与工厂类就能创建图形, 使系统的结构更加清晰, 层次更加分明, 有利于系统的开发与调试。如果要增加功能, 需要添加新的主要图形对象时, 客户端程序和父类接口都不需要做任何改动, 只需增加新的图形类, 在工厂类的创建对象函数中增加创建新类对象的代码即可, 使系统有较强的可扩展性。

用户可以在客户端对图形进行移动、改变大小、编辑属性等操作, 这些都是封装在类的内部实现, 用户直接调用接口方法, 从而无需了解其中的过程, 很好地实现了封装。

从图2可以看到, Track类和Curve类都是由不同的子元素构成, 这里提取了组合模式的概念, 对这两个类进行了组合。子元素只出现在父元素的内部, 因此在客户端所展示的只有父元素 (Track类和Curve类) , 这也使得客户端简洁易懂。同时子元素内部还有更细小的元素, 例如柜形框类 (PRectangle) , 直线类 (PLine) , 字体类 (PFont) , 文本类 (PString) 等绘图基本元素类。当增加一个新的绘图类时, 也可以直接使用这些绘图基本元素类, 达到重用的效果, 增加系统的灵活性。

3 系统实现

下面用两个简单的类来说明系统的实现过程。创建绘图对象的工厂类函数:

绘制图形道对象Track类, 继承Plot Object类:

系统实现效果如图3。

4 结束语

通过上述的设计方法, 可以更加灵活地实现测井曲线的绘制, 以及方便地对已绘制图形对象进行移动、调整大小、编辑属性等。同时能够满足图像操作的流畅性、易用性和灵活性, 通过改进的抽象工厂模式使绘图组件有更好的复用性。该文介绍的设计方法并不只局限于测井曲线的绘制, 用户可以根据具体需求自定义组合图形对象, 绘制属于自己的个性图形。

参考文献

[1]朱卫新.Visual C#.NET实现用户自定义图形编程方法[J].计算机技术与发展, 2011 (4) :130-312.

[2]刘昕.基于GDI+的绘图方法研究[J].硅谷, 2011 (15) :104-105.

[3]闫宇晗, 常鑫.在C#中用GDI+实现图形动态显示[J].计算机技术与发展, 2006 (12) :117-118.

对象实现论文 第10篇

1. 实现目的

AutoCAD是由美国Autodesk公司于二十世纪八十年代初为微机上应用CAD技术而开发的绘图程序软件, 其友好的用户界面, 强大的制图和编辑能力, 现已经成为国际上广为流行的绘图工具。

笔者所在的企业大量使用了AutoCAD, 在设计过程中, 需要获取图纸中某些特定图元对象并对这些对象的属性进行读取、修改或者比对, 以减少人工识别判断的成本, 提高效率。要实现这个目的, 就必须根据图元对象的一些特征进行过滤, 准确地找出它们。虽然AutoCAD本身提供了快速选择功能, 可以按照图元对象所在的图层、使用的线型以及对象特有的属性, 如圆的圆心等进行过滤选择, 但其在复合条件过滤的功能上存在不足, 而且不能对一些特殊自定义的特征进行过滤。因此有必要进行基于AutoCAD的二次开发来实现这个目的。

2. 二次开发平台选择

当前AutoCAD的二次开发工具主要有:VisualLisp、VBA、ObjectARX和.NET API等。VisualLisp与VBA较为简单, 使用方便且开发速度较快, 但其功能相比ObjectARX有所不足, 尤其是对面向对象方面, 但它们对AutoCAD版本的依赖较少, 基本可以实现版本间的平滑过渡。ObjectARX基于VC平台, 在C++的支持下, 其功能非常强大, 可以很好地运用各种面向对象技术, 但其缺点是发开速度比较慢, 需要针对不同版本的AutoCAD进行定制, 同时对开发人员的能力要求较高。.Net与前三者相比还属于新平台, 应用还不够不广泛, 因此予以排除。

如果AutoCAD版本的使用情况较多且无法统一, 采用ObjectArx开发无疑会增加软件开发和维护的难度。VBA相对VisualLisp较易维护, 在数据库交互, 系统API调用方面较VisualLisp简单。综合考虑企业的实际情况和以上因素, 笔者选择了VBA作为开发平台。

(二) 研究与实现

1. 对象及函数说明

一个Dwg文件包含的图元对象可能数以万计, 如果用循环对它们一一筛选过滤显然是不可行的, 因为这样做效率会很低。必须采用AutoCAD提供的VBA开发接口实现。

选择集对象SelectionSet是一组指定作为单个单元处理的AutoCAD对象, 它可以包含一个或多个对象。选择集能按照一定的规则对指定范围内的对象进行筛选, 将符合规则的对象添加自身的集合中。

SelectionSet提供了不同的对象选择方法:Select, SelectAtPoint, SelectByPolygon, SelectOnScreen。笔者主要使用的是Select方法, 通过它对DWG文件中的全部图元进行选择过滤。它的格式如下:

SelectionSet.Select Mode[, Point1][, Point2][, FilterType][, FilterData]

Mode表示选择的模式, 它包括acSelectionSetWindow, acSelectionSetCrossing, acSelect ionSetPrevious, acSelectionSetLast, acSelectionSetAll

Point1和Point2参数指定的是要进行选择过滤的窗口范围。

FilterType和FilterData定义的是过滤组码和组码值, 也就是DXF编码, 根据制定的对象DXF编码进行过滤。

从Select方法的参数中可以看出, 实现选择过滤的关键是DXF编码, 根据需要设置不同的DXF编码就可以达到过滤不同图元对象的目的。

2. DXF编码简介

DXF编码是DXF文件中的编码格式, DXF文件是AtuoCAD与其他软件进行数据交互时使用的一种文件。在DXF文件中, 每个数据元素前面都带有一个称为组码的整数。组码的值表明了组码后面的数据元素的类型, 还指出了数据元素对于给定对象 (或记录) 类型的含义。每个图元对象根其属性, 例如所属图层、图元类型、颜色、线性等都是一个DXF编码的集合。因此, 可以根据这些DXF信息进行特定图元对象的过滤。

3. 功能实现

根据DXF的编码规则和SelectionSet的Select函数, 可以很方便地进行图元对象过滤, 下面是几个实现的例子。

(1) 基本图元对象过滤

下面的代码实现了在整个DWG文件中, 过滤出圆心在2个二维点minPnt和maxPnt构成的区域内, 且位于模型空间上的圆对象

2.块对象过滤

下面的代码实现了在整个DWG文件中, 过滤出块名称包含“图块”2字, 且位于模型空间上的块对象

3.为图元对象添加自定义特征并过滤

有时, 需要为图元对象中添加一些自定义的特征, 使其与其他图元较为明显的区别, 以便提高过滤的准确性。这些特征必须永久存在于图元对象中, 并且是稳定的, 不会随图纸每次打开或关闭而改变。这里可以使用图元对象的SetXData函数。SetXData函数的功能是为图元对象添加一组扩展数据, 扩展数据主要为ObjectArx和Lisp的反应器使用, VBA本身并不能使用反应器, 但可以利用SetXData为对象添加一些自定义的字符串特征。

下面的代码创建了一个圆对象, 并为其添加了扩展数据

上面的3段代码, 可以快速准确地过滤出不同类型的图元对象, 尤其是第3个例子, 通过创建拥有独特属性的图元, 一方面可以简化过滤的条件, 另一方面可以提高过滤的准确性, 与其他DXF编码过滤条件配合使用则可以实现更为精确的过滤。

(三) 总结

通过以上代码实现, 基本达到了基于DXF编码对AutoCAD图元对象进行过滤的目的。该方法拥有较广泛的用途, 例如图框识别和图签信息读取。通过各种复合过滤方式可以识别出绘制的图纸中的图框数量, 图框大小, 并且可以读取图签中的文字对象中填写的图纸信息, 极大地提高图纸打印效率和日后图纸归档的准确率。笔者将在该基础上继续研究, 更进一步地发掘其功能, 争取让其发挥更大的作用。

参考文献

[1]张晋西.VisualBasic与AutoCAD二次开发[M].清华大学出版社, 2002.

上一篇:异常增生下一篇:哲学蕴涵