软件构造lab2心得与体会

阅读: 评论:0

软件构造lab2心得与体会

软件构造lab2心得与体会

0x00 序

lab2对于java初学者来说是很硬核的,其中涉及到的知识确实不少。

0x01 Poetic Walks

  1. ADT
// interface
public interface Graph<L> {...
}
// implement wahtever type you want
public class ConcreteVerticesGraph implements Graph<String/...> {...
}
  1. OOP
public class object{private int num;private string label;//constructorpublic object(String label){this.label = label;}//getterpublic int getNum(){return num;}//setterpublic void setNum(int num){this.num = num;}...
  1. Set

java Set包含三种:Hashset/Treeset/LinkedHashset

创建(new)时需要指明:

Set<String> res = new HashSet/...<>();

详见此文

  1. Map
// Map<Key, Value>
Map<String ,Integer> map;
map.put("Monday", 1);
System.out.("Monday"));
// shoulde be 1
ve("Monday");
  1. ArrayList

遍历:
①get(int index)方法
②for(type e : list){ … }
③iterator
删除:
防止错误最好使用ve() 详见此文

  1. assert
// if label == NUll , exit and print
assert label != null : "label NULL!";
// if label == NULL , exit
assert label != null;

0x02 改写lab1的FriendshipGraph

可以说有了P1的改写后十分简单,基本没有工作量。值得注意的是ADT的封装,这里涉及到非常多的知识,这种开发模式很让我摸不着头脑,但经过P3的磨练,基本已经摸清了道路。

0x03 MyChessAndGoGame

从零开始设计ADT完成问题,对于java新手来说最困难的是构思自己的ADT,即要想清楚什么类里应该放什么变量,要完成什么功能。可以说是一个小步试错,快速迭代的过程。弄明白ADT的设计到底是什么回事,其中的af&ri到底表示了什么,细读MIT的资料是一个不错的选择(Readings10-11)
Readings10翻译与总结 Readings11翻译与总结
对于一个ADT来说,我们十分强调它的封装性与不变性。根据要满足的功能,我们得先构思出ADT的如下内容:

  1. 它在用户看来会是怎么样的一种数据类型(A空间)

  2. 为实现这个抽象数据类型我们应该用什么样的数据结构(R空间)

  3. R空间中有哪些数据是不在考虑范围内的(错误的),我们需要考虑有什 么样的限制让数据均在合法范围内(checkRep)

上述内容构思完基本可以写出af&ri和规约了,下面考虑如何码出来:

  1. 将field设为private并辅以getter访问基本上是标配
  2. 确定它是否是可变的,这决定了是否有Mutator(setter等方法)
  3. 根据功能完善Observer、Producer
  4. 检查自己的方法,查看是否有表示泄露

可以说本次实验最大的收获便是如何从零开始构造一个ADT,这是java赋予用户的财富:自由构造数据类型。只有通过自己亲手实践才能慢慢体会到,遵循一些看上去很复杂的规定最后都是为了一个圆润、完美、令人极度舒适的结局。

本文发布于:2024-01-31 11:59:53,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170667359328364.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:Poetic Ticks
标签:心得   软件
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23