目录
一、什么是软件复用?
1.软件复用
软件复用(SoftWare Reuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。(源于:百度)
2.复用级别
我们将软件复用划分为四种类型:
• 代码级复用:就是通过编写大量的公共类,公共函数等等,供开发人员直接使用。
• 组件级复用:通过将功能的组件化封装,对外提供一组或多组的API接口。
• 模块级复用:在我们开发的项目或者产品中,会发现大量重复的功能模块,比如用户管理,机构管理等等,如果我们在这些模块设计的时候,注重一下扩展性,那么可以应用到有其它类似功能的项目中。在这个级别需要一定的项目的积累,否则在模块功能上以及实用性上会遭遇风险。
• 构架级复用:构架级在设计概念上最为高级的一种。它相当于一个平台或者思想,在这个平台上,可以开发出根据此平台思想稳定而又高效的软件产品。
3.软件复用的主要思想
将软件看成是由不同功能部分的“组件”所组成的有机体,每一个组件在设计编写时可以被设计成完成同类工作的通用工具,这样,如果完成各种工作的组件被建立起来以后,编写一特定软件的工作就变成了将各种不同组件组织连接体来的简单问题,这对于软件产品的最终质量和维护工作都有本质性的改变。
4.软件复用的优缺点
• 开发成本的降低。如果在一个项目中,能够直接用到以前项目中的代码,控件,模块,作为一个软件企业,显然的可以把开发成本降低。
• 开发层次的提升。大家知道,罗马不是一天建成的,同样的,在软件开发上,也不会一蹴而就的写出高质量的代码。当我们有意识的进行复用时,我们会在每次重复使用某段代码或者控件的过程中,发现其不足的地方,从而加以改进,这样就会逐渐的提升我们的开发层次,提升整个公司开发的层次,使得公司的软件与其他公司有着根本的不同。
• 产品化的必然阶段。在我们公司目前没有明确的开发产品的现阶段,那么对软件复用的使用,就是我们产品化的一个途径,我们在不断的复用的过程中,不断的强化我们的代码的功能,直至有了一定固定功能,运行稳定,扩展性好的软件,这样一个产品就可以自然而然的产生了.
二、类(Class)层面设计可复用软件
1.概念
是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
2.类库技术的软件复用
类的实质是一种引用数据类型,类似于byte、short、intchar)、long、float、double等基本数据类型,不同的是它是一种复杂的数据类型。因为它的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的数据类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
类库技术是软件复用的基础,在软件开发过程中,程序员通过调用类库中的函数可以达到软件复用的目的。
三、API(应用编程接口)层面设计可复用软件
1.概念
一些预先定义的函数,或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而无需访问原码,或理解内部工作机制的细节。
2.API设计原则
• 小巧:一个类的公共成员尽量少。这样做可以使代码更容易理解、记忆、调试和修改。
• 完整:完整意味着该有的功能都应该有。这一点貌似和小巧有所冲突,但是,如果一个成员函数出现在错误的类中,那么大部分使用者应该都不会找到它。
• 简单清晰:正如其他的设计工作一样,你应该应用这些原则,尽量避免特殊情况。使大部分工作变得简单,特殊的部分也需要考虑但不是本文所关注的。解决特殊问题的原则:如非必要,不要将解决特殊问题的方案影响到通用的情况。
• 观:因每个人的经验和背景的有所差异,因此对直观的判断也会不同。API设计得直观的原则可以理解为:一个经验不足的使用者可以不用使用文档而仅使用代码来理解并使用API。
• 容易记忆:为了使API容易记忆,你应当选择一个一致并准确的命名习惯。使用容易辨别的模式和概念,避免缩写。
• 代码可读性:代码只会写一次,但是却会经常去阅读(调试和修改)。可读的代码也许不再需要重写,但生命周期却贯穿整个产品的生命周期。
• 静态多态:相似的类应当有相似的API。可以使用继承来完成这项工作,即运行时多态特性。但是多态也发生设计阶段。例如,你可以改变一个QProgressBar为QSlider,或者是一个QString为QByteArray。你会发现相识的API使得替换工作变得非常容易,因此这里我们叫它“静态多态”。
静态多态也使得记忆和编程变的更加容易。相关的类使用相似的API通常要比每个类独立的设计API要好得多。
• 可见性:典例:实现或者调用某个函数过程
• 实现某个函数的时候,函数的参数类型本来并没有见过,但通过智能感知提示我们能够了解到这个新 API 并正确取到参数中我们期望得到的信息。
• 调用某个函数的时候,我们需要传入本来并没有见过的参数类型,通过智能感知提示,我们能够知道如何构造或获取这些类型然后正确传进去。
• 调用完某个函数后我们得到了返回值,我们本来并没有见过这个类型,但通过智能感知提示,我们能够学习到这个新的类型,并知道如何正确使用这个返回值。
四、框架(Framework)层面设计可复用软件
1.概念
一组具体类、抽象类、及其之间的连接关系 开发者根据 framework的规约,填充自己的代码进去,形成完整系统。通常通过选择性覆盖来扩展框架;或者程序员可以添加专门的用户代码来提供特定的功能。我们从应用方面和目的方面给出框架的定义:
应用方面:框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。
目的方面:框架是可被应用开发者定制的应用骨架。
2. 白盒框架
• 白盒框架是基于面向对象的继承机制。在这种框架中,父类的方法对子类而言是可见的。子类可以通过继承或重写父类的方法来实现更具体的方法。
• 局限性:父类中的方法子类一定拥有,要么继承,要么重写,不可能存在子类中不存在的方法而在父类中存在。
(19060722班学生lzq学习心得)