软件构造Lab1,Lab2总结

软件构造lab1,lab2经验总结

由我们课程老师的定位,软件构造实验一所涵盖的内容为软件构造基础,包括课程的第一,三讲与习题课一,软件构造实验二所涵盖的内容为ADT构造与OOP编程实践,包括第4到8讲与习题课2。

Lab1

就实验一的内容而言,实验一较为简单。但是其对于java语法与软件构造思想的涵盖面已然非常之广,是初步接触软件构造时良好的入门训练集。

幻方

幻方问题是一个比较简单的java计算训练,但是就java语法而言其涉及到的内容还是比较广的,正所谓麻雀虽小,包括且不限于Java基本数据类型,JavaIO(流的控制与文件读写),Java异常,Java正则表达式,Java常见数据结构的方法调用,面向对象编程,代码的复用或框架的使用。单拎出一个就可以有大量详细的讨论。对于只学过java基本语法的我来说,内容较广的实践给我一个机会可以熟悉java程序的一些基本编程流程,为后续实现高级结构减少基础失误。

Turtle图像绘制工具

这是MIT提供的实验内容,其实现流程与步骤已经详尽地给出来了,当弄清楚整个程序的框架时就已经比较简单了。这里我认为引起我注意的是整个的实现是在一个给定好的框架(模型)上实现的。等于说,完成这次实验,本身就是一个以其他人的代码框架为模板,在其中我感受到了良好的代码分格与ADT与OOP中接口与spec对于合作编程,复用编程的巨大帮助,而且这一过程消耗的精力是极少的。Java语言本身也将这种方式发挥成了自己较强的特质。
对于该实验本身要做的工作,大部分都是只要思路明确,代码量是不多的。对于倒数第二个凸包算法,实际上也是适当的考验了学生的算法实践能力与方法熟练程度。

Social Network

这个实验是CMU所提供的的一个面向对象编程的java实践。对于我来说,一开始就想到用C语言广度搜索的数据结构,确实是阻碍了我头脑中构造对象的思想,只是尝试把图中的节点作为一个数据结构。
而经过了实验内容的引导以后,我发现简单的从零开始的面向对象编程的本质是尽可能以对象的方式贴近实际,只要可以,具体的事物就可以构建为对象,添加必要的解决问题的属性,就如一个完完整整的Person可以用有好多方法,同时在FriendshipGraph中与之进行交互一样。
能充分了解到面向对象编程还要依赖不算太复杂的BFS距离计算算法,要实现这个算法,FriendshipGraph充分利用了其各种方法来实现算法,表现了java的编程方式(使用各种方法等)可以是使用者平滑过渡到其他对于各种类的调用,这对我本人有充分的启发。

Lab2

从实验二开始,我们实践的内容就真正涉及到软件的系统设计与实现,要为了实现一个具体的功能要求,全面完成软件构造的全部流程。
由于整个实验基本从零开始且一气呵成,不打算像lab1进行分版块的叙述。

Get to know the general process of software construction (Design
Programming  Debug  Testing  Build  Release) 广义的软件构造过程

Lab2优先进行design,然后进行test设计,是TDD驱动的编程,接下来进行编程与测试,且一切流程有标准的规范与原则。除此之外增加了java的泛型实现,还增加了对java中equals()与hashCode()的实现。并且独立出一块内容,实现lab1第三部分的socialnetwork。整个过程符合ADT设计与OOP的流程,但未涉及到太多有关复用与维护的内容,基本没有涉及到CRP与SOLID原则。
ADT的设计流程
1.为ADT设计接口,设计接口需要的方法,并design出详细的spec,考虑immutable与mutable
2.TDD,设计出合适的划分与测试用例,同时考虑是否添加相关方法,如辅助的observer
3.设计实现类,实现类中的rep
4.设计AF,RI,考虑Safety from rep exposure
5.根据Rep与RI,设计出checkRep函数(private)
6.实现具体的方法,按照Safety from rep exposure考虑mutable危险,传入传出防御式拷贝,前置条件后置条件assert exception检查,调用CheckRep,提防表示泄露
7.对toString,equals,hashcode方法进行重写,考虑ADT的等价性,行为等价性,观察等价性
8.对编程结果进行Junit测试,修改直至全部通过,最后查看覆盖率,尽量使其高。
9.对于完成的ADT,使用继承或委派的方式对其进行复用,在client处实现具体的功能(按需定义接口,实现接口,继承委派,这是第三章的内容)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值