#软件构造 ADT与OOP的总结 (1)

24 篇文章 1 订阅
8 篇文章 0 订阅

在软件构造课程的第三章
Abstract Data Type (ADT) and Object Oriented Programming (OOP)
中主要分为五个子章节

  1. 3-1 Data Type and Type Checking 数据类型与类型检验
  2. 3-2 DesigningSpecification 设计规约
  3. 3-3 Abstract Data Type (ADT) 抽象数据类型
  4. 3-4 Object-Oriented Programming (OOP)面向对象的编程
  5. 3-5 Equality in ADT and OOP ADT和OOP中的“等价性”

下面我们边分别对这五个子章节进行总结

3-1 Data Type and Type Checking 数据类型与类型检验

3.1.1 有关数据类型

java中数据类型又可分为**Primitives(基础数据类型)**和 Object Reference Types(引用数据类型)
他们之间存在如下的特征与区别

PrimitivesObject Reference Types
int, long, byte, short, char, float, double, booleanClasses, interfaces, arrays, enums, annotations
No identity except their value 只有值,没有ID (与其他值无法区分)Have identity distinct from value 既有ID,也有值
Immutable 都是不可变的Some mutable, some not 存在可变/不可变
On stack, exist only when in use 在栈中分配内存On heap, garbage collected 在堆中分配内存
Can’t achieve unity of expressionUnity of expression with generics Dirt cheap
代价低More costly代价昂贵

3.1.2有关对象

对于对象数据类型 又存在一个结构层次
所有的对象都是继承于Object 这个类
除Object以外的所有类都具有一个父类,并通过extend子句指定,如果省略extends子句,则默认为Object
如下图所示:
在这里插入图片描述
而一个类是其所有父类的实例,机制如下:

  1. 从其父类继承非private的属性方法
  2. 可以重写父类的方法以更改其行为

为了方便的使用基本数据类型,将基本类型包装为对象类型 例如: Boolean, Integer, Short, Long, Character, Float, Double
有以下几点需要注意:

  1. 通常是在定义集合类型的时候使用它们
  2. 一般情况下,尽量避免使用
  3. 一般可以自动转换

3.1.3静态与动态数据类型检查

Java是一门静态类型语言 ,在编译阶段进行类型检查 (可在编译阶段发现错误,避 免了将错误带入到运行阶段,可提高程序正 确性/健壮性)
对于静态类型检查,通常有:

  1. Syntax errors 语法错误, like extra punctuation or spurious words. Even dynamically-typed languages like Python do this kind of static checking.
  2. Wrong names 类名/函数名错误, like Math.sine(2) . (The right name is sin)
  3. Wrong number of arguments 参数数目错误, like Math.sin(30, 20) .
  4. Wrong argument types 参数类型错误, like Math.sin(“30”) .
  5. Wrong return types 返回值类型错误, like return “30”; from a function that’s declared to return an int .

而动态类型检查又可分为:

  1. Illegal argument values 非法的参数值.
  2. Unrepresentable return values 非法的返回值
  3. Out-of-range indexes 越界
  4. Calling a method on a null object reference. 空指针

3.1.4 Mutability and Immutability——可变性和不变性

对于我们在程序中对一个内容进行修改,存在两种修改的方式:

  1. 改变一个变量:将该变 量指向另一个值的存储空间
  2. 改变一个变量的值:将 该变量当前指向的值的存储空间中写入一个新的值。

而为了尽可能维护我们的程序的稳定性,我们需要尽可能避免变化,以避免副作用
那我我们就要引入 Immutability 不变数据类型: 一旦被创建,其值不能改变
而Java也给我们不变性的一个参考:variables that are assigned once and never reassigned. 变量一经确定就不能重新再指定
如果是引用类型,也可以是不 变的:一旦确定其指向的对象,不能再被改变

所以我们可以尽量使用 final变量作为方法的输入参数、作为局部变量。
而final这个修饰符对其修饰的变量又有以下的定义:

  1. final类无法派生子类
  2. final变量无法改变值/引用
  3. final方法无法被子类重写

综上,可变性和不变性的边界就被划分出来了:
对于不变对象:一旦被创建,始终指向同一个值/引用
对于 可变对象:拥有方法可以修改自己的值/引用

对于不可变的变量类型,我们需要避免其表示泄露,采用防御式拷贝,给客户端返回一个全新的对象

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值