软件构造2

Posted yry1160300116

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件构造2相关的知识,希望对你有一定的参考价值。

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()

以上是关于软件构造2的主要内容,如果未能解决你的问题,请参考以下文章

软件构造第一章 软件构造基础

软件构造2

软件构造常用技术

构造之法

软件构造第六章第三节 面向可维护的构造技术

软件构造第二章第二节 软件构造的过程系统和工具