Skip to content

Commit

Permalink
✏更新 专业素养
Browse files Browse the repository at this point in the history
  • Loading branch information
0xcaffebabe committed Oct 7, 2020
1 parent 6d9c342 commit 190623c
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions 通识/专业素养.md
Expand Up @@ -86,6 +86,10 @@

## 编码

**你不可能写出完美的软件**

防御式编程不仅仅防御别人的代码 还要防御自己

出错感知能力能帮助你更快速地从错误中学习

准备:
Expand Down Expand Up @@ -116,6 +120,59 @@

帮助他人 接收他人的帮助

### 合约式编程

DBC:

- 前条件:调用程序前 必须为真的条件
- 后条件:程序保证会做的事
- 类不变项:确保从调用者的角度看 总是为真的条件

实现方式:

- 断言 但是无法继承
- 部分语言内置支持 但是大部分语言不支持 通过使用预处理器来实现它

**早崩溃**

通过检查前置条件 早一点暴露错误 调试就会容易许多

尽早崩溃比造成破坏是更好的选择 Java中的运行时异常采用了这一哲学

不变项:

- 循环不变项:循环的边界很容易出错 通过定义一个不变项来证明结果有效
- 语义不变项:定义一个合约来表达不可违反的需求

动态合约与代理:合约可以发生变化

### 断言式编程

**如果它不可能发生 用断言确保它不会发生**

不要关掉断言 这世界很危险 程序很容易出错

### 异常的使用

异常不应该是程序正常流程的一部分 而是留给意外事件

不支持异常的编程语言只能使用错误处理器 c语言可以通过使用goto的方式来实现全局异常处理

### 资源的使用

- **有始有终** 分配资源的程序应该负责回收资源

资源的分配:

- 以资源分配的反序释放资源 这样就不会造成资源被遗弃
- 分配同一组资源的时候 总是以相同的顺序进行分配 这可以降低死锁发生的可能性

资源的释放:

- 递归回收 顶层对象一旦被释放 就递归地释放子资源
- 顶层回收 就直接遗弃所有子资源
- 如果顶层含有子资源 在所有子资源释放前 拒绝释放顶层

## 注重实效

### 重复
Expand Down

0 comments on commit 190623c

Please sign in to comment.