软件构造复习总结(2_1)

        快要考试了,根据所给提纲和上课所学边复习边罗列一下重难点吧。学得不好,如有疏漏欢迎指正!

一、基本数据类型、对象数据类型

数据类型:本质是一个集合

基本数据类型:只有值、无ID;不可变;在栈中;使用时存在,无法实现表达的统一;代价低

        如:int、long、boolean、double、char

对象数据类型:继承自Object;既有ID也有值;有些可变;在堆中;代价昂贵

        如:String、BigInteger、Classes、interfaces、arrays、enums、annotations

二、静态类型检查、动态类型检查

        动态类型检查 >> 静态类型检查 >> 无检查

静态类型检查

        可在编译阶段发现错误,避免将错误带入到运行阶段,可提高程序正确性、健壮性

        语法错误、类名、函数名错误、参数数目错误、参数类型错误、返回值错误

        -> 与类相关

动态类型检查

        非法的参数值、非法的返回值、越界、空指针

        -> 与值相关

注:Java是只进行静态检查的语言,运行出错时会停止不会查错

三、Mutable、Immutable

        1.不变性:设计的重要原则

        2.不变数据类型:

                一旦被创建,其值不能改变——保证声明时无改变类的属性、方法

                如果是引用类型,也可以是不变的:一旦确定其指向的对象,不能再被改变

                final:

                        若final immutable类型,则运行中数据均不变——静态检查的一部分

                        若final mutable类型,不能指向新对象,可以改变值

                        final无法派生子类、final变量无法改变值/引用

                        final方法无法被子类重写

        3.可变数据类型:

                拥有方法可以修改自己的值、引用

                方便分享、方便作为全局变量

        4.example:

                String:immutable

                StringBuilder:mutable

        5.二者比较

                最终值是相同的

                当只有一个引用指向该值,没有区别

                多个引用时,immutable是牺牲速度换安全:

                        使用immutable,对其频繁修改会产生大量的临时拷贝(需要垃圾回收)

                        使用mutable,使可变类型最少化拷贝以提高效率

  

四、值的改变、引用的改变

        改变引用是改变指针,改变值是在这个指针下改变对象内容

五、防御式拷贝

        即返回一个全新的对象

        大部分时候该拷贝不会被客户修改,可能造成大量的内存浪费

        immutable效率更高,正是因为其不用进行防御式拷贝

六、Snapshot diagram(必考)

        用于描述程序运行时的内部状态

        优点:便于程序员之间的交流、便于刻画各类变量随时间变化、便于解释设计思路

        基本类型的值:

        对象类型的值:

        immutable和mutable:

                不可变对象/引用用双椭圆/箭头

                注:引用是不可变的,但指向的值却是可变的;可变的引用,也可指向不可变的值

七、Specification、前置/后置条件

        包含内容:输入、输出的数据类型、功能和正确性、性能

        只讲“能做什么”,不讲“怎么实现”

        example:

        前置条件:对客户的约束,在使用方法时必须满足

        后置条件:对开发者的约束,在结束方法时必须满足

        契约:如果前置条件满足了,后置条件必须满足;而前置条件不满足,则方法可以做任何事

        除非spec必须如此,否则不应该改变输入参数

        限定“不可变”、不应靠用户/程序员道德限定

        

八、行为等价性

        站在客户(需求)的角度考察是否等价

        不是单纯地看实现代码,需要根据spec判断

        实现相同的功能,但可能展现出不同的性能

九、归约的强度

        归约变强:前置条件更弱,后置条件更强

        -> implementor的自由度和责任越重,而client的责任越轻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值