软件构造学习心得ADT与OOP(1)

ADT与OOP

本篇博客着重介绍ADT与OOP中的一些重要概念以及主要思想。

数据类型以及类型检查

数据类型:

  1. 基本数据类型(primative types) :我们所常用的int,double,char,long,boolean均为基本数据类型。
  2. 对象数据类型(object types):拥有属于自己的域,方法的一组值。
  3. 可变类与不可变类:对象的内容会发生改变的类被称为可变类,不可发生改变的类称为不可变类。基本数据类型均为不可变类。

动态数据类型与静态数据类型:

1.静态数据类型:在编译时需要知道所以的变量类型,编译器可以推断所以表达式的类型。IDE支持输入时进行语法检查。
2.动态数据类型:在编译时不需要判断变量类型是否正确,自由度较高。
(java语言为静态数据类型语言)

类型检查:

1.静态检查:在程序运行之前进行自动检查。
2.动态检查:在代码被加载时自动检查。
3.No Checking:程序语言本身没有自动检查的机制。

静态检查:

1.检查是否有语法错误。
2.名称错误。
3.参数个数错误。
4.参数类型错误。
5.返回值类型错误。

动态检查:

1.非法参数:比如x/y中y为0就是不合法。
2.不可描述的返回值:即该返回值不能作为代表出现在该类型中。
3.超出范围的索引值:如数组越界等。
4.调用空对象的方法。

静态检查针对类型与特定值无关的错误,动态检查针对由特定值引起的错误。

规格说明

1.规格说明是团队开发的关键,是分配责任的基础。
2.规格说明是实现者和使用者之间的一种契约,实现者有责任满足契约,使用者可以信赖契约。
3.规格说明对双方都有约束。
4.规格说明给了实现者实现的自由,在保证约定下,可以自由修改实现。
5.通过在说明中增加对输入的限定,省略掉耗时的正确性检查工作,提升效率。(保证输入正确性的责任由调用者承担)
6.Spec不应涉及内部变量及私有域。

行为等价

1.确定行为等价,关键是一个规格说明是否可以替代另一个
2.等价的判定由调用者视角决定。
3.判定可替代与否,需要对调用端依赖内容的准确描述。

规格说明的结构:前置条件和后置条件

规格说明蕴含了以下逻辑:如果前置条件满足了,后置条件必须满足。反之,如果前置条件不满足,后置条件无需满足。

可变性与不可变性

在学习可变性与不可变性之前,我们先来明确一个小概念

改变量与改变值的区别

1.对变量赋值是在改变变量的指向,指向不同的值

String str = "abc";
str = "bcd";
这样就是改变了变量。

2.改变可变变量的内容时,是在改变变量内部内容的引用

StringBuilder sb = new StringBuilder();
sb.append("a");

不变性的设计原则

1.不变数据类型创建完,值不可修改。
2.不变引用,一旦指定引用位置,不可再次指定。

二者的优缺点

使用不可变类型对象进行某些操作例如string的“+”操作时,中间会出现大量copy操作,而这种操作会占用大量时间。而使用可变类型操作,则不会产生该缺点。
使用可变类型的优点还有就是可变类型对象更利于我们程序的不同部分去共享。
然而不可变类型对象也并非一无是处,事实上我们在实际应用时也需要大量的不可变类型对象。
不可变类型具有以下优点:
1.更加安全。
2.易于理解。
3.更加适合改变。
4.可通过内存共享相同值,降低复制带来的内存空间占用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奇迹飞鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值