HIT 软件构造 第6章
在软件工程中的软件维护是交付后修改的软件产品已经纠正了故,提高性能或其他属性
课维护性的常见度量指标:
循环复杂度:测量代码的结构复杂度
代码行数(LOC)
Halstead volume :根据源代码中运算符和操作符的数量(HV)
可维护性指数(ML)
The per of comment lins per module(com)
Depth of Inheritance (继承的深度)
类耦合程度
单元测试覆盖度
模块化设计与模块化原则
模块化程序指将整个程序代码高层次分解为多个部分
设计的目标是将系统划分为模块,并且在组件之间:高内聚,低耦合
评估模块化的五大标准:可分解性,可组合性,可理解性,可持续性,出现异常后的保护。
模块化设计的五条原则:直接映射,尽可能少的接口,尽可能少的接口,显示接口,信息隐藏
Coupling and Cohosion(耦合与聚合)
耦合是模块之间依赖关系的度量,如果两个模块之间的变化可能需要另一个模块的变更,则连个模块之间存在依赖关系。
聚合是衡量一个模块的功能或责任有多强壮程度的一个指标,如果模块的所有元素都朝着相同的目标努力,则模板具有高聚合。
SOLID:单一责任原则,开放封闭原则,Liskov替换原则,接口隔离原则,依赖转置原则.
Creational patterns
Factory Method pattern
Intent:定义创建对象的接口,让子类决定实例化哪个类
factory 让类将类的实例化推迟到子类
(个人理解)不用个人知道对象是什么具体的类了,只需知道相应的工厂就知道生产对象。
Abstract Factory pattern
抽象工厂只是工厂方法设计的扩展,抽象工厂模式允许更多类型的对象来扩展工厂方法模式。
使用工厂返回可用于创建相关对象集的 工厂
Builder pattern
将复杂对象的构造与其表示分开,以便相同的构建过程可以创建不同的结果
1.接口中规定出算法的抽象步骤(builder)
2.director规定一个构造算法
3.接口具体的实现
Structural patterns
Bridge Patterns
将类的功能层次结构与实现层次结构分离
实现可以再运行时切换
proxy patterns
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口
Intent:为其他对象提供一种代理以控制这个对象的访问
主要解决:
在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
Composite Pattern
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。
intent :将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性
Oberserver Pattern
观察者模式:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式
intent :定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
Abstract subject:维护独立列表,当主干改变时通知他们
Abstract observe:定义更新依赖者的协议
ConcreteSubject 为受抚养人管理数据,当主人更改时通知他们
Concrete observers 在收到更新消息后获得新的主体状态
Vistor pattern
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作
intent :主要将数据结构与数据分离。
State pattern
状态设计模式允许您在一个运行时更改对象的行为或者状态,每个行为都由一个状态类表示,行为可以从一个状态变为另一个状态
意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
Memento(备忘录) pattern
意图 :在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象在外保存这个状态,这样可以将对象恢复到该原先保存的状态
Memento 存储Originator 对象的内部状态,Originator 根据需要决定Memento存储那些内部状态。
Originator 创建一个Memento 用以记录当前时刻的内部状态。使用Memento恢复状态
Caretaker 负责保存Memento 不能对Memento内容进行修改。
基于语法的构建:
语法成分:
终端:语法终端文字串
为了描述一串符号,无论它们是字符串还是其他类型的以固定集合中抽取的符号,我们都成为语法的紧凑表示法
语法定义一组字符串:e.gURL的语法将指定HTTP协议中合法URL的一组字符串,文法中的文字称为终端
URL:: = http://'[a-z]+''.'[a-z]+''/'
在这种单线形式下,只有一个非终结符的生产者使用操作符和终端,而一个语法称为正则表达式
Markdown 是一种可以使用普遍文本编辑器编写的标记语言,通过简单的标记语法可以使普通文本内容具有一定的格式
Grammer定义语法规则Parse generator 根据grammer 定义的规则产生一个parser client 利用parse解析文本,看其是否符合语法定义的对其做的各种处理。