Lab1
本次实验通过求解三个问题,训练基本 Java 编程技能,能够利用 Java OO 开发基本的功能模块,能够阅读理解已有代码框架并根据功能需求补全代码,能够为所开发的代码编写基本的测试程序并完成测试,初步保证所开发代码的正确性。另一方面,利用 Git 作为代码配置管理的工具,学会 Git 的基本使用方法
本次实验的感想
通过本次实验,我从一开始的毫无头绪到后来能够理解实验问题一二三所描述的内容,并有一个解决的思路。在一开始配置实验环境的时候,发现对git是完全陌生的,从前也没有了解过这方面的知识,于是查阅了LAB0中的阅读指南,在本地机器安装了相应的开发环境并按照阅读指南上的步骤一步步的实现了相关操作也对git有了一个初步的认识,后来在老师课上讲完git的相关内容后加深了印象,后来在使用自己的电脑进行了一些实验,虽然实验的过程中时时报错,但是通过在csdn上搜索报错原因也让我更好的理解了git。
所以在本次实验中,我发现如果直接不看LAB0而直接着手开始LAB1的书写你会一脸懵,这个实验所需要的一些知识都在LAB0的pdf中有了相关的描述以及说明,或者有相关的指南。只有在你初读了这些知识并了解吸收了之后再着手做实验就会发现实验如鱼得水,之前的疑惑也慢慢的解开。
Lab2
本次实验训练抽象数据类型(ADT)的设计、规约、测试,并使用面向对象编程(OOP)技术实现ADT。具体来说:
针对给定的应用问题,从问题描述中识别所需的ADT;
设计ADT 规约(pre-condition、post-condition)并评估规约的质量;
根据ADT 的规约设计测试用例;
ADT的泛型化;
根据规约设计ADT 的多种不同的实现;针对每种实现,设计其表示(representation)、表示不变性(rep invariant)、抽象过程(abstraction function)
使用OOP 实现ADT,并判定表示不变性是否违反、各实现是否存在表示泄露(rep exposure);
测试ADT 的实现并评估测试的覆盖度;
使用ADT 及其实现,为应用问题开发程序;
在测试代码中,能够写出testing strategy 并据此设计测试用例。
本次实验的感想
面向ADT的编程在完成之后,如果有其他需要编写的类可以直接调用我之前完成的类中的接口来完成新类中的方法,这样的接口让编程变得更有效率,可以减少写冗余代码的时间。而面向应用场景的编程面就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;
总而言之就是面向ADT的编程具有封装性、继承性和多态性,而面向应用场景的编程是不具有的。
先给出规约就能清晰的理解知道这个方法这个属性所需要遵守的是什么,这样在编写测试用例的时候就可以直截了当的写出覆盖度和正确率都很高的测试代码,并且测试策略也在脑中清晰的存在。
这种测试方法在一开始接触的时候有些不适应,但是在练习了几次之后渐渐习惯就能体会到这种编写代码的好处。
Lab3
本次实验覆盖课程第 2、3章的内容,目标是编写具有可复用性和可维护性的软件,主要使用以下软件构造技术:
子类型、泛型、多态、重写、重载
继承、代理、组合
语法驱动的编程、正则表达式
API 设计、API 复用
本次实验给定了三个具体应用(值班表管理、操作系统进程调度管理、大学课表管理),学生不是直接针对每个应用分别编程实现,而是通过 ADT 和泛型等
抽象技术,开发一套可复用的 ADT 及其实现,充分考虑这些应用之间的相似性
和差异性,使 ADT 有更大程度的复用(可复用性)和更容易面向各种变化(可维护性)。
本次实验的感想
通过自己独立实现本次实验的三个app,让我对java的语法和软件构造课上老师说的mutable和immutable,表示暴露,CRP,LSP,委托,继承,重写,重载和复用都有了一些自己的理解。并且在从无到有的过程中,感受到了复用的强大,只要你提供的接口是正确的,那么就算修改了一个部分,只需要换一个面向新得改变的维度的接口来实现就可以节省很多的写代码的时间。