软件构造Lab3+心得

实验要求:
在这次实验中,要求我们面向可维护性和可扩展性编程,面向至少三个有一定相似程度但又不完全相同的应用设计一套通用的ADT,完成几个不同场景的应用。
个人心得:
1.从哪下手???
在实验指导书上,我觉得给了我们一些之后面向这种抽象程度比较高的ADT的设计的一些启发,我把这种方法叫做维度拆分。具体说来就是我们需要对各个应用场景做分析,可以这样去考虑,假如我不需要抽象出共用的ADT,就是针对某个应用场景去为它设计一套ADT,那么这个ADT究竟应该怎样设计,就比如,本次实验中的航班管理计划项,很自然,会去想,需要关于飞机的描述,需要关于机场的描述,需要起始时间的描述,需要关于状态的描述等等,那么就可以把这个再去往其它的比如课程比如高铁的计划项上作映射,看看哪些是计划项的共有属性,再看看这些属性中在不同的应用场景中有什么不同,就像实验指导手册中给的那个表一样,这样理清楚头绪会给之后的设计提供很多的帮助和参考。

在这里插入图片描述
2.关于设计???
维度拆分完之后,我们需要为其设计一个大致的设计方案,我们可以采用实验指导书上给的实验方案(后几种比较好一些),也可以综合某几种灵活设计,在这里不想对这几种设计方案再多说些什么,想要说一些体会,
(1):既然是关于可复用性的设计,在设计的时候就应该考虑好以后可能会怎么变化,怎么复用,为以后的拓展留出余地。
(2):既然是关于可复用性的设计,在实现的时候就应该就应该面向可复用实现,不要怕麻烦,现在的麻烦是为了以后改变的方便。
(3):关于”委托“和“继承”,继承在使用起来个人感觉不如委托方便,委托有一种“拿来主义,为我所用”的感觉,而继承有一种“不管你愿不愿意,都需要继承”的感觉,尽管你可以在原有的基础之上做出改变以适应自身需求,但比较麻烦,而且还有LSP原则的限制。
(4):关于一系列设计模式,在上课的时候觉得讲的设计模式很多,但是在实验中理解,才发现有很多设计模式都是基于接口的,其能增强可变性的原因都是因为接口统一不同实现的能力。
(5):尽量为每个类都重写equals和hashCode方法,尤其是你不确定它会不会被加入到集合类这样的数据结构当中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章