Data Type and Type Checking
Outline
- Data type in programming languages 主要还是Java
- Static vs. dynamic data types 静态和动态数据类型
- Type checking
- Mutability & Immutability(可变性和不可变性)
- Snapshot diagram 快照图
- Complex data types: Arrays and Collections 数组和集合
- Useful immutable types
- Null references 空引用
Data type in programming languages
primitive types(基础数据类型) | object types(对象数据类型) |
---|---|
int, long, byte, short, char, float, double, boolean | Classes, interfaces, arrays, enums, annotations |
除了value之外没有任何区别 | 具有与值不同的区别方式(有时是地址) |
都是Immutable(不可变),并不意味着在多线程中的调用就会是安全的 | 有些可变有些不可变 |
在栈中,只有用的时候才存在 | 在堆中,通过GC(garbage collected)回收 |
Can’t achieve unity of expression无法实现表达的统一 | Unity of expression with generics表达与泛型的统一 |
Dirt cheap使用成本非常低 | 比较(也可以说是挺)费的 |
- primitive types are lowercase, while object types start with a capital letter. 基本数据类型小写开始,对象数据类 型大写开始
- Immutable containers for primitive types 你可以将基本数据类型封装为不可变对象(大写就完事了) – Boolean, Integer, Short, Long, Character, Float, Double ,但是在程序中除非必要不要这么做(这将大大降低你的代码的效率),即使必要的时候,语言也可以自动将基础数据类型转化为这种不可变对象
- primitive types(基础数据类型)不能为null,否则编译器会报静态错误
Static vs. dynamic data types
Java是静态语言,所有变量的类型在编译时就已经必须是已知的了
Type checking
- Static checking(静态检查): the bug is found automatically before the program even runs(程序运行之前就自动进行检查)
- Dynamic checking(动态检查): the bug is found automatically when the code is executed(程序运行时报错)
- 你可以采用(你想得到的类型)变量进行强制转换:例如double a = (double)2/3; // a = 0.6666…
Mutability and Immutability
可变类型的优势 :
- 使用不可变字符串,这会产生很多临时副本(比如String a=a + b 原本那个较短的a仍然存在,只不过a 不再指向它了,但它仍然占用了内存)
- 方便共享而且性能较优
可变类型的缺陷:多线程情况下并不安全
About Snapshot
我们需要了解不可变对象(如字符串)和不可变引用(如最终变量)之间的区别
- Snapshot有助于理解这一点
- 对象是值,由Snapshot中的圆表示,不可变的对象有一个双边框,表示它从不更改其值
- 引用是指向对象的指针,由Snapshot中的箭头表示
- 不可变引用是带双线的箭头,表示不能移动箭头指向其他对象。
Designing Specification 设计规约
Outline
- Function / method in programming language 函数/方法都有规约
- Specification: Programming for communication 规约:为了交流编程
Why specification is needed 需要规范的原因
Behavioral equivalence 行为等效
Specification structure: pre-condition and post-condition 规格结构:先决条件后决条件 - Designing specifications 设计规范
Classifying specifications 分类规范
Diagramming specifications 绘图规范
Quality of a specification 规格质量
Spec不应涉及实现的内部变量和私有域