目前流行的编程语言中,有的效率高但容易发生内存错误(如C++),有的内存安全但效率偏低(如Java),本发明专利技术公开了一种C语言程序设计中基于对象编程的方法及系统,它是一种方便、安全、高效的编程框架。该系统利用栈技术来高效地判断一个“对象”(即非普通类型变量)的属性,并且规范了对象的赋值等操作,能够及时释放对象资源,并同时使对象的使用效率(或参数传递效率)最优化。该系统中提供了对象和对象操作函数的定义模板来方便编程者定义对象和对象操作函数,由此定义的对象和函数可以像使用普通类型变量和函数那样方便地进行递归、嵌套调用等等任意复杂的操作,其中的内存安全和效率问题将由模板自动处理。
【技术实现步骤摘要】
本专利技术涉及对C语言程序设计中基于对象编程的方法,通过该方法能实现在C语言程序设计中基于对象编程的方便性、安全性、和高效性。
技术介绍
C语言具有语法简明、贴近计算机底层的优点。一个刚刚接触C语言学生经过短暂的学习后,就能用C语言编写高效率的一般计算程序。所以,C语言被最为广泛地选择为高校的程序设计教学语言,具有最为广泛的知熟群体。绝大部分的编程人员都懂得C语言。但是,在解决复杂问题时,如窗口程序设计、网络程序设计、大型的科学计算程序设计等,C语言的使用率则大大降低。其中一个很重要的原因是,复杂问题中具有各种各样的复杂对象,例如一个窗体、一副图片,而用C语言直接处理对象具有很大的不方便性。在C语言中处理对象时,需要大量地将结构体、指针、内存申请和释放函数结合起来使用,这样的使用往往让一个C语言新手遭遇堆栈溢出、内存泄漏、效率低、野指针、隐蔽的计算错误等等烦恼,对这些问题的调试往往花费编程者大量的时间和精力。另外,不同编程者的对象的实现方式上也各式各样,不便于共享。最终,人们用C语言编写的复杂对象程序往往失去了 C语言应有的简洁。为了方便地处理复杂对象,人们专利技术了更高级的程序设计语言,其中最为有名的语言有C++和Java。C++堪称是最为复杂的语言,它虽然保留了 C语言的贴近计算机底层的特性,但它同时也引入了许多复杂的概念。C++的复杂性所带来的较高学习成本使得越来越多的程序设计学习者转向其它的语言。另外,C++中实际上依然存在指针和内存问题。Java具有和C语言一样的语法简明的优点,所以吸引了大批的使用者。但遗憾的是,它所依赖的内存托管机制会带来程序运行效率和内存使用效率的降低,所以Java主要用于网络编程,在科学计算等应用中用得很少。
技术实现思路
本专利技术的目的在于提供一种C语言程序设计中基于对象编程的方法及系统,使得人们能够使用C语言这门简单、拥有最广泛知熟群体的语言来编写简洁、安全、高效的基于对象的程序。本专利技术的基本思路是提供一个基于对象编程的底层系统,该系统包括地址栈和地址栈操作函数库、对象定义模板、和对象操作函数定义模板。基于地址栈和地址栈操作函数库,当一个函数在返回一个对象类型的返回值时,将该对象同时注册到地址栈顶部。当其它函数接收该函数的返回对象作为自己的输入参数时,能够根据地址栈顶部元素信息来判断出该参数是一个函数返回对象。利用这个重要的判断,在接收该对象的函数内部可以对该对象进行恰当的资源回收或者高效利用,从而达到内存安全和高效的目的。对象定义模板和对象操作函数则对对象的回收或高效利用这些技术细节进行了规范的包装,使得编程者可以不用关心这些细节而方便地编写安全、高效的程序。本专利技术解决其技术问题所采用的具体技术方案是一种C语言程序设计中基于对象编程的底层系统,其中包括存储函数返回对象的地址栈以及地址栈的操作函数库;对象定义模板;对象操作函数定义模板。该系统提供两种使用模式,调试模式和发行模式。在调试模式下,模板能够在编译和运行时刻检查不符合模板规定的程序编写方式,提供改正意见。在发行模式下,模板不进行规则检查,而是以最大效率运行。地址栈的操作函数库包括入栈函数,用于将一个函数返回对象的首地址压入地址栈顶部;出栈函数,用于将一个函数返回对象的首地址从地址栈中取出;判断函数,用于判断一个对象的首地址是否在地址栈中;保护函数,用于在地址栈顶部压入一个结点,以保护嵌套调用;去保护函数,用于取出地址栈顶部的结点,以解除保护;接收函数,用于接收一个没有其它函数来接收的函数返回对象;回收函数,用于在函数体内部回收属于函数返回对象的函数参数。外部程序只允许通过地址栈操作函数访问地址栈。对象定义模板包括一个结构体的定义,在该结构体中定义对象的数据成员。然后,模板还包含了九个标准函数构造函数、初始化构造函数、释放函数、函数返回函数、直接赋值函数、释放赋值函数、克隆函数、值拷贝函数,屏幕输出函数。构造函数或初始化构造函数用于给一个空的指针变量构建对象实体;释放函数用于显示地释放一个不再需要的对象资源;函数返回函数用于在需要返回一个对象的函数体内部代替常规的return函数;直接赋值函数用于将一个函数返回对象赋值给一个空的指针变量;释放赋值函数用于将一个函数返回对象赋值个一个已有对象实体的指针变量;克隆函数用于给一个由指针变量所指向的对象实体克隆出一个新的相同实体;值拷贝函数用于在两个类型和大小一样的实体之间进行值拷贝;屏幕输出函数用于在屏幕终端查看该对象。对象定义模板中还包含由新定义的对象构成的数组对象和链表对象。对象定义模板中的对象成员分为两种,一种是C语言中规定的简单类型变量或用户自定义的简单结构体类型变量,另一种是用户自定义的对象类型变量。标准函数中的直接赋值函数、释放赋值函数、克隆函数、值拷贝函数规定了 4种规范的“=”操作。在这种规范下,能够避免无意义的“=”操作,例如当程序中将一个函数返回对象作为“=”操作的左值时,模板会发出错误警告。在这种规范下,还能使“=”操作的效率最大,还能避免在编程者非特意的情况下“=”操作造成的同一函数体内的多个不同指针指向同一个对象实例,还能避免“=”操作造成的野指针。编程者使用对象定义模板来定义自己的新对象的方式是将模板代码拷贝到自己的程序中,将模板代码中的对象名称替换为新对象的名称,将对象的数据成员的名称替换为新对象的数据成员名称。然后,删除多余的成员或仿照已有成员添加新的成员。当将模板中的对象名称替换为新对象的名称时,模板中还会自动生成由该新对象构成的更高级的数组对象和链表对象。所有的地址栈操作函数和对象标准函数在调试模式下都有参数检查功能,会对不符合规定的函数使用方式发出错误警告。这些函数在发行模式下则以最大效率运行。对象操作函数模板包含五个关键部分函数功能代码块,保护层;参数检验块;资源回收块;对象返回语句。函数功能块是编写该函数功能语句的区域,是核心部分;保护层由分别紧贴于函数功能块上下的保护函数和去保护函数构成,它用于保护函数功能块中的对象操作函数的调用;保护函数的上部是参数检验块,它用于对函数输入参数进行合法性检验;去保护函数的下部是资源回收块,它用于回收函数输入参数中的函数返回对象和函数体内部定义的临时变量。对象返回语句位于函数体的最后,它先将返回对象首地址压入A中的地址栈,然后返回对象。编程者应该按照对象操作函数模板所规定的结构定义自己的对象操作函数。本专利技术的有益效果是根据底层系统中的模板定义的对象和对象操作函数使用起来非常方便,编程者可以像操作简单变量那样操作对象,包括可以以简单变量函数的方式将对象作为函数返回值;可以像简单变量函数那样进行对象操作函数的嵌套调用;可以像简单变量函数那样进行对象操作函数的递归调用;等。与此同时,模板的使用保证了在这些方便的调用方式中的内存安全性和高效性。四附图说明图1为本专利技术C语言程序设计中基于对象编程的方法较佳实施例的流程图。其中(a)为一般性的流程图,(b)以数学中的复数为例对图(a)进行了更清楚的解释。图2为本专利技术C语言程序设计中基于对象编程的方法较佳实施例中的地址栈及其操作函数的示意图。图3为本专利技术C语言程序设计中基于对象编程的方法较佳实施例中的对象定义模板的不意图。图4为本专利技术C语言程序设计中本文档来自技高网...
【技术保护点】
一种在C语言程序设计中基于对象编程的方法及系统,包括:A、记录函数返回对象(101)首地址的地址栈(102)和地址栈操作函数(103);B、基于地址栈(102)和地址栈操作函数(103)来定义新的对象类型的对象定义模板(104);以及C、基于地址栈(102)、地址栈操作函数(103)和对象定义模板(104)来定义新的对象操作函数的函数定义模板(105)。
【技术特征摘要】
【专利技术属性】
技术研发人员:肖波,
申请(专利权)人:中国工程物理研究院流体物理研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。