SC: 3章

HIT - 软件构造

3章:

基本数据类型:int,long,boolean,double,char,short,byte,float

对象数据类型:classes,interface,arrays,enums,annotations

Java是一种静态类型的语言,所有变量的类型在编译是已知的,Java可以静态检查,在像python这样的动态类型语言中,这种检查被推迟到运行时。

静态检查的类型:语法错误,名字错误,参数个数错误,参数类型错误,返回错误

动态检查的类型:非法参数,非法返回值,数组越界,空指针引用

不变性:不变数据类型创建完后,值不可变(final)

一个final类不能被继承,一个final变量不能被改变,一个final方法不能被重写

String为不变类型,StringBuilder为可变类型

快照图:表示程序的内部状态,它的堆栈在运行时的方法和他们的局部变量及其堆,变量为单箭头,不变量为双箭头

行为等价:一个实现代替另一种实现

前提条件是客户的义务,这是调用方法的状态。后置条件是实现者的义务,如果前提条件被满足看则后置条件必须被满足,比如:返回适当的值,抛出指定的异常,修改或不修改对象等等。

前置条件写在@Param 后置条件写在@return @throws

规约的强度:如果S2的前提条件<=S1 ,S2的后置条件>=S1,对于满足S1前提条件的状态,则规约S2强于S1

ADT:抽象数据类型是软件工程中一般原则的一个实例,它有很多名称:抽象模块化,封装,信息隐藏。

数据抽象类型的特点是可以对其执行操作

ADT四种操作

creator 创作该类型的新对象,creator可以将对象作为参数,但不是正在构建类型的对象

producer 从该类型旧对象中产生新对象,String的Concat方法是一个producer

observers 采用ADT对象并返回不同类型 eg:List中的Size()

Mututors 改变对象 eg:List中的add()

表示独立性:ADT的使用与其表示形式无关,因此表示形式的变化对抽象类型本身之外的代码没有影响 eg:List的独立的不管是表现为Linked list或array

表示不变性和抽象函数

R:表示值空间,由实际实现的实体的值组成

A:抽象值空间,就是抽象想表示的值空间

AF:将表示值映射到它们表示的抽象值,R->A图中的弧显示抽象函数。

RI,AF 是doc形式 

OOP:

oop应该把类作为中心概念

继承 extends

重写 override

多态性是操作可以应用于其他类型的值的类型。

分为 adhoc polymorphism,function overloading,parametric polymorphism,generic programming

(oop其他内容,请看java核心技术)

防御式拷贝:不把自己的引用传给别人,首先new一个新对象,把自己的信息传递给这个对象,然后给别人展示这个对象。

ADT和OOP的equality:用抽象函数     使用关系     使用观察

就ADT而言“观察”意味着调用对象的操作。所以当且仅当通过调用抽象数据类型的任何操作不能区分他们时,两个对象是相等的

==比较的是引用  

equal()比较的是对象的信息

equals满足传递性,自反性,对称性

对于不可变类型:equals()应该比较抽象值。这与equals()应该提供行为平等相同,hashcode()应该将抽象值映射到一个整数。所以不可变类型必须覆盖equals()和hashcode()

对于可变类型 equals()应该比较引用,就像==一样。同样与equals应该提供行为平等一样。所以不应该重写equals()和hashcode()

展开阅读全文

没有更多推荐了,返回首页