第十章面向可维护的构造技术
Some common-used maintainability metrics
Cyclomatic Complexity 圈复杂度 v(G) = E-N+2 或 = Path+1(需要建立代码的流程图)
Lines of Code 代码行数 (如果一个方法或者类型的代码行数太多,说明它做了太多的工作,应该分开成多个模块来承担)
一些其他常用的可维护性度量
Halstead Volume 霍尔斯特德容积: 一种基于源代码中(不同的)运算符和操作数数目的复合度量。
Depth of Inheritance 继承的层次数
Class Coupling 类之间的耦合度
Unit test coverage单元测试的覆盖度
模块设计及设计原则
评价模块性的五个标准:
- 可分解性:是否一个大的模块可以分解成更小的模块
- 可组合性:是否一个小的模块可以合并成更小的模块
- 可理解性:是否这个模块可以容易理解
- 可持续性:—发生变化时受影响范围最小
- 保护性:出现异常后受影响范围最小
低耦合和高内聚
一个很好的例子(web三剑客:html,css,js)
OO Design Principles: SOLID
-
(SRP) The Single Responsibility Principle 单一责任原则
不应有多于1个的原因使得一个类发生变化
-
(OCP) The Open-Closed Principle 开放-封闭原则
模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化,但模块自身的代码是不应被修改的,扩展模块行为的一般途径是修改模块的内部实现(在很多设计模式中对此基本上说的都是新建新方法而不是修改九方法),如果一个模块不能被修改,那么它通常被认为是具有固定的行为
-
(LSP) The Liskov Substitution Principle Liskov替换原则(前面介绍过了)
-
(DIP) The Dependency Inversion Principle 依赖转置原则
不能强迫客户端依赖 于它们不需要的接口:只提供必需的接口。意思说的是接口中的方法不应该对于实现它的类来说存在多余。比如实现的类不需要这一方法,但却不得不去实现。感觉这一思想和单一责任原则差不多
-
(ISP) The Interface Segregation Principle 接口聚合原则
抽象的模块不应依赖于具体的模块,具体应依赖于抽象
Grammar-based construction(语法驱动的编程)
(上下文无关语法)nonterminal ::= expression of terminals, nonterminals, and operators
(正则表达式)右侧只能有终结符和运算符
学习推荐资料:java正则表达式 学完形式语言与自动机学这个很容易就可以上手了
浙公网安备 33010602011771号