软件构造博客3

抽象数据类型是软件工程中一个普遍原则的实例,从它衍生出很多意思相近的名词。这里列出了几个能够表达其中思想的词:

  • 抽象: 忽略底层的细节而在高层思考
  • 模块化:将系统分为一个模块,每个模块可以单独的进行设计、实现、测试、推倒,并且在剩下的开发中进行复用。
  • 封装:在模块的外部建立起一道“围墙”,使它只对自己内部的行为负责,并且系统别处的bug不会影响到它内部的正确性。
  • 信息隐藏:将模块的实现细节隐藏,使未来更改模块内部时不必改变外部代码。
  • 功能分离:一个模块仅仅负责一个特性/功能,而不是将一个特性运用在很多模块上或一个模块拥有很多特性。

作为一个软件工程师,你应该知道这些名词,因为你会在以后的工作中经常遇到它们。这些思想的本质目的都是为了实现我们这门课的三个目标:远离bug、易于理解、可改动。

事实上,我们在之前的课程中已经碰到过这些思想,特别是在设计方法和规格说明的时候:

  • 抽象:规格说明使得使用者只需要弄懂规格说明并遵守前置条件,而不是让他们去弄懂底层的代码实现
  • 模块化:单元测试和规格说明都帮助了将方法模块化
  • 封装:方法中的局部变量都是被封装的,因为他们仅仅可以在方法内部使用。与此相对的是全局变量和指向可变对象的别名,它们会对封装带来很大损害。
  • 信息隐藏:规格说明就是一种信息隐藏,它使得实现者可以自由的更改实现代码。
  • 功能分离:一个规格说明应该是逻辑明确的,即它不能有很多特性,而应该完成好一个功能。

  • 创建者creator:创建一个该类型的新对象。一个创建者可能会接受一个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型。
  • 生产者producer:通过接受同类型的对象创建新的对象。例如, String类里面的 concat 方法就是一个生产者,它接受两个字符串然后据此产生一个新的字符串。
  • 观察者observer:接受一个同类型的对象然后返回一个不同类型的对象/值。例如List的 size 方法,它返回一个 int
  • 修改器mutator:改变对象的内容,例如 List的 add 方法,它会在列表中添加一个元素。

  • 不变量是指对于一个对象,它有一种能够在整个生命周期保证为真的属性。
  • 一个好的ADT会确保它的不变量为真。不变量是由创建者和生产者创建,被观察者和改造者保持。
  • 表示不变量明确了什么是合法的表示值,并且这些表示应该在运行时调用checkRep()检查。
  • 抽象函数将具体的表示映射到抽象值上。
  • 表示暴露会威胁到表示独立性和表示不变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值