软件构造复习笔记(四)数据类型与类型检验

目录链接

  • Part I Data type in programming languages
    • 1.1Primitive types基本数据类型
    • 1.2Object types对象数据类型
    • 1.3一些注意事项
  • Part II Static vs. dynamic data type checkingas
    • 2.1静态类型语言和静态检查
    • 2.2动态类型语言和动态检查
    • 2.3一些检验经验
    • 2.4检查不出来的错误
  • Part III Mutability and Immutability
    • 3.1Immutability不变性
    • 3.2两种类型的优缺点
    • 3.3一些风险的实例
  • Part IV Snapshot diagram as a code-level, run-time, and moment view
    • 4.1快照图的作用和内容
    • 4.2一些小练习
  • Part V Complex data types: Arrays and Collections
    • 5.1Array
    • 5.2List
    • 5.3Iterator
    • 5.4Set
    • 5.5Map
    • 5.6迭代器在使用时要注意的问题

文章的内容是我在复习这门课程时候看PPT时自己进行的翻译和一些总结,如果有错误或者出入希望大家能和我讨论!同时也希望给懒得翻译PPT而刷到这篇博客的你一些帮助!


Part I Data type in programming languages


我们学校软件构造这门课程选用的编程语言是Java语言,接下来这一部分会给大家介绍Java语言中的一些数据类型


先说一下数据类型的概念。

数据类型:一组值以及可以对其执行的操作。举个栗子说吧·,例如int类型,他是一个整型变量,可以存储整数数值,而这个i就叫做变量

变量:用特定数据类型定义,可存储满足类型约束的值。

1.1Primitive types基本数据类型

基本数据类型和C语言中的一样,有int、char、boolean等等就不在这里一 一赘述了。

图2.4.1 检验练习题

Part III Mutability and Immutability


这一部分介绍可变数据类型和不可变数据类型的用法区别以及各自的优缺点。


我们可以使用等于 “=”来对变量进行赋值操作,要举个例子,可以在声明变量的同时为变量赋值,这一点不加赘述了。重点还是放在可变类型和不可变类型上面。那么为什么要区分可变类型和不可变类型呢/strong>因为变化是麻烦的源头,但是变化又是程序必须要留在内心的恶魔。所以要尽可能的避免变化,同时又要使程序灵活。

3.1Immutability不变性

不变性是一个很很重要的设计原则,而不可变数据类型的意思就是一个变量一旦被创建,它的值就不能会再改变了。而Java语言使用一种叫“引用”的方式来操作自己的变量,可以理解成类似指针的东西,将我们创建的一个变量指向一个创建的对象来对其进行操作。

对于引用类型,也可以使之变成不可变的数据,可以使用声明变量。举个例子,那么sentence这个变量就和这句话便成了一种“绑定”的关系,如果在后面的编程中你试图改变sentence指向的位置,类似编译器在进行静态检查的时候就会提示一个静态错误

图3.1.2 不可变数据类型快照图

而是一个可变数据类型的很好的例子。在这个类中,有一些方法能够对他指向的字符串进行整体或全部的删除插入替换等等操作,而不是简简单单返回一个新值。我么看如下代码和程序快照图便知:

图3.1.4 对比快照图

我么可以看到,如果我们此时引用s,那么它的值还是”ab”;而如果我们引用sb,它的值则会变为”abc”,这便是二者区别。

3.2两种类型的优缺点

  • 不可变数据类型:
    使用不可变数据类型显然可以减少变化的发生,以避免副作用。它更加安全,在一些其他指标上表现更好。而其缺点也很明显,对不可变数据类型的频繁修改会产生大量的临时拷贝,也就是需要进行垃圾回收。
  • 可变数据类型:
    可变数据类型可以最少化拷贝,可以提高效率,可以获得更好的性能,也更加适合于在多个模块之间进行数据共享。而它的缺点就是让程序的易读性变差,也更难满足方法的规约。

所以在使用这两种数据类型的时候需要进行折中,看看你更需要哪个方面的优势。

3.3一些风险的实例

  • Risky example #1: passing mutable values:
    先放代码再分析:

这段代码有着安全性问题,它破坏了程序的规约。具体是在哪里破坏的呢方法中,它将输入的可变类型参数list中的值全部取了绝对值,也就是说它改变了输入参数的值!这显然是扯淡的,也是不合规矩的。因此,传递可变数据类型是一个潜在的错误源泉,一旦无意间将其值改变,这种错误非常难于跟踪和发现。

  • Risky example #2: returning mutable values:
    原始代码如下:

之后我们将代码修改为以下,使用全局变量来存储日期,让他能够不重复的存储:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月5日
下一篇 2022年5月5日

相关推荐