Software Construction(软件构造)

一、概述
这篇文章是软件构造的文章的学习心得,这里的文章是从Java的基本语法、数据类型、API、接口、测试以及规格的设计、递归、调试和线程、数据结构、过滤器等方面来介绍。下面是从中选取的三篇文章核心内容的翻译和自己的学习心得。
二、抽象数据类型、接口和枚举、递归数据类型
(1)抽象数据类型(ADT)
1、抽象数据类型的概念
抽象数据类型使我们能够将我们如何在程序中使用数据结构与数据结构本身的特定形式分开。
抽象数据类型是软件工程中一般原则的一个实例, 抽象的概念:
抽象:规范是一种抽象,因为客户仅需了解其使用的先决条件和后置条件,而无需了解实现的完整内部行为。
模块化:单元测试和规范有助于将方法整合为模块。
封装:方法的局部变量被封装,因为只有方法本身可以使用或修改它们。与相反的全局变量相反,或者与指向具有别名的可变对象的局部变量相反,后者也威胁封装。
信息隐藏:规范使用信息隐藏为实现者留出了实现方法的自由。
关注点分离:如果规范仅负责一个关注点,则它是一致的。
2、抽象数据类型的理解以及分类、操作
我所理解的抽象数据类型就是用户自定义的数据类型,不论是内置数据类型还是用户自定义的数据类型,都可以分为可变对象和不可变对象,可变对象就是可以更改的对象,经过一些操作会使这个对象发生变化,比如说StringBuilder/StringBuffer这两个类,它的字符串长度就是可变的;不可变对象,比如说String这个类,对它进行str.charAt()、str.toUpperCase()…操作的时候,只是拷贝了一份,并不是对原本的这个对象进行操作的,经过一系列的操作之后该对象还是不变的。
抽象类型的操作:1)创建者创建该类型的新对象。创建者可以将一个对象作为参数,但不能将其构造为对象。2)生产者从该类型的旧对象创建新对象。所述concat的方法String,例如,是一个生产者:它需要两个字符串并产生表示其级联一个新的。3)观察者获取抽象类型的对象,并返回不同类型的对象。的size方法List,例如,返回int。4)存取器更改对象。的add方法List,例如,通过将元素添加到末尾来对列表进行变异。
3、抽象数据类型的举例
int是Java的原始整数类型。 int是不可变的,因此没有变项。
List是Java的列表类型。 List是可变的。 List也是一个接口,这些类包括ArrayList、LinkedList以及版本比较旧的Vector实现了这个list接口,接口不能实例化,必须依靠这些实现类才能进行实例化。
String是Java的字符串类型。 String是不可变对象。
4、代表独立性
代表独立性是什么意思呢?意思是数据类型应独立于表示形式。这意味着抽象类型的使用独立于其表示形式(用于实现它的实际数据结构或数据字段),因此表示形式的更改对抽象类型本身之外的代码没有影响。例如,所提供的操作List与列表是表示为链表还是数组无关,它的实现类Vector和ArrayList底层是一个数组,而LinkedList底层是一个链表,但是List这个接口并不关心它的底层是什么,只要可以实现它这个接口就可以了。
5、总结
ADT在我所理解的就是是指一个数据模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。比如说在学习数据结构的时候,例如栈这个数据结构,我们就定义了栈中的元素、栈顶位置以及入栈、出栈、取栈顶元素这三个方法,至于这个数据结构用数组或者链表实现,我们并不care。
(2)接口和枚举
1、接口
Java interface是一种用于表达抽象数据类型的有用语言机制,它将功能进行独立。接口中只能包含抽象方法和常量,这个接口其实就是表达抽象数据类型,因为这个接口中并没有具体的实现方法,而是让一个类或者多个类实现它(实现它所有的抽象方法),因此这一点和抽象数据类型是相通的,它不必关心抽象方法做什么,让它的实现类关心就可以了。
2、枚举
枚举用来表示可以能“穷举”出来的概念,它是一种特殊的类,这个类中没有属性/方法,只有一些内置的属性。

enum Sex{
    MALE,
    FEMALE,
    UNKNOWN,

}
public class TestEnum {
    public static void main(String[] args) {
        Sex s = Sex.MALE;
        System.out.println(s);
        System.out.println(Arrays.toString(Sex.values()));
    }
}

3、抽象数据类型、枚举、接口的联系
1)Java接口帮助我们将抽象数据类型的概念形式化为必须由类型支持的一组操作。
2)Java枚举允许使用一小组有限的不变值来定义ADT。与特殊整数值或特殊字符串的老式替代方法相比,枚举可帮助我们编写代码。

猜你喜欢

转载自blog.csdn.net/Subuprogrammer/article/details/106290139