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()
原文地址:https://www.cnblogs.com/yry1160300116/p/9191436.html