从类,api,框架三个层面学习如何设计可复用软件的具体要求,并写学习心得
学校作业
复用
依据复用成分抽象程度的高低,可以将复用过程划分为如下的复用级别:
(1)代码的复用
包括目标代码的复用和源代码的复用。其中目标代码的复用主要依靠编程语言的编译系统提供的连接、绑定等功能来实现,该复用的级别最低,源代码复用是指在程序设计时,防水墙把—些以前编写的代码直接复制到现在的程序个,但这样往往会导致新旧代码不匹配。因此.这两种复用都不够理想。
(2)设计的复用
设计结果比代码更为抽象,复用时所带要的修改较少,并且不易受环境变化的影响,更有利于软件的复用
(3)分析的复用
它比设计结果具有更高的复用级别,可复用的分析构件是对某个问题域处理一些问题的通用方法,它不容易受设计技术及实现条件的影响,因此复用的可能性更大。
类的层面
继承
面向对象的开发语言中自然少不了继承,有了继承,就可以使子类拥有父类的属性和方法,这也是一种复用,甚至可以说是十分重要的一种复用,子类可以不用将某些方法
委托
在java中类直接调用这个类的static方法,类似c语言中的函数,直接调用就行,这样也是一种类的复用。类似Math.sprt()这种方法。
API层面
API应该做一件事,且做得很好
API应该尽可能小,但不能太小
Implementation不应该影响API
类的设计:尽量减少可变性,遵循LSP原则
方法的设计:不要让客户做任何模块可以做的事情,及时报错
框架层面
框架:一组具体类、抽象类、及其之间的连接关系
开发者根据 framework的规约,填充自己的代码进去,形成完整系统。通常通过选择性覆盖来扩展框架;或者程序员可以添加专门的用户代码来提供特定的功能—即定义继承了抽象类祖先操作的具体类 Hook方法,它被应用程序覆盖以扩展框架。Hook方法系统地将应用程序域的接口和行为与应用程序在特定上下文中所需的变体解耦。 控制反转:与库或标准用户应用程序不同,控制流不是由调用者决定的,而是由框架决定的。不可修改的框架代码:在接受用户实现的扩展时,框架代码不应该被修改。换句话说,用户可以扩展框架,但不应修改其代码。
常见的框架类似于spring框架这种,spring框架代码不能修改但是拥有DI,IOC,方便用户创建对象,何时创建对象,交给系统来判断,用户只需要使用对象就行了。
类型也有两种:
白盒复用:源代码可见,可修改和扩展,复制已有代码当正在开发的系统,进行修改
优点:可定制化程度高
缺点: 对其修改增加了软件的复杂度,且需要对其内部充分的了解
黑盒复用:源代码不可见,不能修改,只能通过API接口来使用,无法修改代码
优点:简单清晰
缺点:适应性差
参考资料
https://blog.csdn.net/dark_souls/article/details/106464205?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-6.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-6.control