日期:2023-01-24 阅读量:0次 所属栏目:软件技术
摘 要:摘要:软件复用技术是现在软件开发过程中常用的一种软件开发技术,他可以大大提高软件开发的效率、提高软件开发的质量、降低软件开发的成本。本文介绍了利用C++进行软件开发时,我们常用的软件复用技术,主要研究了C++语言对软件复用技术的主要的支持手段和实现机制。
关键词:关键词:C++;软件复用;软件开发
中图分类号:TP393 文献标识码:A 文章编号:
1. 软件复用技术简介
从上世纪60年代软件开发逐渐兴起以来,软件开发经历的多个发展阶段。随着软件规模的越来越大,软件开发复杂度的逐渐提高,落后的软件开发方式需要改变,同时企业对于软件的质量要求也越来越高,如何提高开发效率以及提高软件质量成为了软件开发企业和软件工程师需要解决的一个主要问题。在这样的背景之下,软件复用技术应运而生。
当前,软件工程思想中有三个主要的策略,它们分别是软件复用、折中、分而治之。其中,软件复用的思想是软件工程开发中一个实用性极强且功能强大的技术。
软件复用技术放弃了一切从头开始设计的软件开发方式,借鉴采用了许多工程设计学科中利用的基于构件的思想来进行资源的复用。软件复用技术,不仅仅指开发过程中对程序代码进行复用,对于软件设计过程中的其它的一些成果也可以进行复用,比如:针对软件设计的需求分析、软件设计的可行性报告、软件开发完成之后进行的软件测试方案、项目计划书等等。采用软件复用技术之后,软件开发企业可以大大减少许多不必要的创建工程,从而大大加快了软件开发速度,极大的减少了产品的形成周期,节约来的大量的资源和成本。同时,采用软件复用技术也改善了产品的质量,提高了产品的可靠性,因为进行软件复用的资源,一般都经过许多次利用和测试,其中的问题与缺陷得到了很好的纠正,因此大大减少了软件系统出现问题的概率。另外从企业管理的角度来讲,采用软件复用技术,可以减少企业开发组件的成本的不确定性,尤其针对大规模的系统开发,可以大大降低企业的项目成本的不确定性,从而使软件开发企业面临的风险降到最低。最后,采用此技术对于软件的标准化开发也有一定的意义。
2. C++技术与软件复用技术
C++语言是一种面向对象的语言,而面向对象技术为软件复用过程中的关键——软件构件问题提供了坚实的理论基础,使软件复用技术成为可能。首先,面向对象的多态特性和继承特性可以使软件开发人员选择某些问题的可重用的部分;其次,面向对象的软件开发技术可以将现有的软件进行抽象与封装,从而使之成为可复用成分。总而言之,面向对象语言中的抽象、封装、继承和多态技术可以和软件复用的各种技术相结合,从而很好的实现软件的复用。
当前,C++中的软件复用技术,主要可以分为四类,基于类的软件复用技术、基于继承特性和派生类的软件复用技术、基于多态特性的软件复用技术、基于模板机制的软件复用技术,下面我们对四种软件复用技术进行简单的介绍。
3. C++中的软件复用技术
3.1 基于类的软件复用技术
C++中的类库技术是软件复用的基础,在软件开发过程中,程序员通过调用类库中的函数可以达到软件复用的目的。比如,调用C++类库中的输入输出流函数可以实现输入输出的功能。如下:
#include
#include
int main{
string in_string;
cout<<“please enter your name”;
cin>>in_string;
if(())
cerr<<”error:input string is empty!n”;
else cout<<”hello,”<
3.2 基于继承特性和派生类的软件复用技术
C++语言中,通过其继承特性,可以在原有的类的基础之上生成新的类,原有的类我们称之为基类,新生成的类我们称之为派生类。继承技术是C++语言的一个重要特性,也是实现软件复用的一种重要技术。利用继承技术派生出新类时,我们不需要完全重新开始写代码,每一个派生类都继承了基类的数据成员和成员函数,派生类只需要编写出与基类行为不同的扩展特性即可,因此它大大简化了程序量,提高了工作效率。另外,在派生类的基础之上,我们还可以进一步设计新的派生类,由此可见,派生类的设计可以实现树形发展。继承关系图如下所示:
图一 继承关系图
基类和派生类的定义如下:
class Base {
public:
foo( int );
// ...
protected:
int _bar;
double _foo_bar;
};
class Derived : public Base {
public:
foo( string );
bool bar( Base *pb );
void foobar();
// ..
protected:
string _bar;
};
3.3 基于多态特性的软件复用技术
多态特性是C++语言的一种重要属性,利用C++的多态属性,可以很好的实现软件复用。概况来说,多态特性主要从三个方面来实现软件复用,分别为:运算符重载、函数重载和虚函数技术。其中前面两个属于静态多态特性,而后面一个属于动态多态特性。下面分别就几种多态技术进行介绍:
(1)C++中自带的运算符只针对某些数据类型适用,对某些数据类型是不适用的,为了扩大运算符的适用范围,提出了运算符的重载。运算符重载就是对已有的运算符进行重新定义,赋予其另一种功能,从而适应不同的数据类型。进行运算符重载的关键是要准确理解运算符的定义,从而把原来的运算符变换为一个运算符函数,进而进行调用,运算符重载的实例如:
complex operator+(complex c1,c2)
{ complex result(0,0);
l(l()+c2getreal());
ginary(ginary()+ginary());
return result;
}
上面实例实现了对加法运算符的重载,C++中自带的加法运算符不能直接进行复数的加法,通过重载,可以进行复数的相加。
(2)函数重载所谓函数重载是指同一个函数名可以对应着多个函数的实现。例如,可以给函数名max()定义多个函数实现,该函数的功能是求两个数中较大的数,一个函数实现是求两个int型数中较大的数,另一个实现是求两个浮点型数中两个较大的数,后面两个函数对应的参数不是两个。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数的类型或者参数的个数不同。
int max( int, int );
float max(float,float);
int max( const vector
int max( const matrix & );
函数重载在类和对象的应用尤其重要。函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确
定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。
(3)虚函数是C++技术中实现多态的一种重要的方式。虚函数是通过一张虚函数表来实现的。简称为。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。实例如下:
class A
{ public:
virtual void foo()
{ cout << "A::foo() is called" << endl;
}
};
class B: public A
{
public:
virtual void foo()
{
cout << "B::foo() is called" << endl;
}
};那么,在使用的时候,我们可以:
A * a = new B();
a->foo(); //
在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!这个例子是虚函数的一个典型应用,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。
3.4 基于模板机制的软件复用技术
函数模板就是建立一个通用的函数,其参数类型和返回类型不具体指定,用一个虚拟的类型来代表。它相比较于函数重载而言,具有很大的优势,它不需要为每一个函数写一组函数体完全相同的函数体,利用这个通用的函数,可以应用于不同的数据类型,真正实现了代码的充分利用。
4. 总结
软件复用技术可以重用系统代码,设计方案等,大大减轻了工作量,提高了软件开发的效率并且极大的改善了软件的质量。本文介绍了C++中的四种主要的软件复用技术并对每种技术进行了分析和思考,总的来说,这几种C++中的软件复用技术各有优劣,具有不同的应用环境,我们在实际的软件开发过程中,要根据实际的情况来选择合适的软件复用技术,从而使软件的性能与效率得到最优化。
参考文献:
[1] 张海藩,倪宁.软件工程(第3版)[M].人民邮电出版社,2010-02.
[2] 段小君,高金环.软件复用与面向
对象技术[J].西安邮电学院学报,2004,9(2):103_106.
[3] 吴昌钱.软件复用与面向对象技术[J].南昌教育学院学报,2010(6):192-193.
[4] 赵宝琴.如何在C++中实现软件复用[J].电脑开发与应用,2005,18(1):60-61
[5] Stanley B Lippman,Josee Lajoie著,潘爱民,张丽译,C++ Primer(第三版).
[6]刘正林.面向对象程序设计.华中科技大学出版社2011.
基金项目:云南省教育厅科研基金项目(2011C038)
本文链接:http://www.qk112.com/lwfw/jsjlw/ruanjianjishu/229612.html