软件构造课程总结

本文是对软件构造课程的实验总结,重点探讨了面向接口编程和ADT(抽象数据类型)的理解与应用。通过三个实验项目,阐述了ADT的概念、数据封装以及接口与具体实现类的关系,强调了ADT在代码组织和可扩展性方面的优势。同时,文章提及了在项目中遇到的挑战和解决方法,如使用静态工厂方法、委派设计模式等,对提升编程能力具有指导意义。
摘要由CSDN通过智能技术生成

软件构造课程感想(2)


这篇从实验二着手进行课程的总结和分析,跟上次一样,仅留作个人心得和参考。
实验二开始进入本门课程的重点,难度和复杂度相比实验一有了很大的提升。而且对于结构把握的要求有了很大程度的提高。客观上来说,实验一实际上只是预热,实际上并没有完全脱离前面所学和使用的c的编程习惯;而到了实验二,加入了面向接口和ADT之后,实际上向OOP迈向了真正意义上的第一步。

下边还是先列出来实验报告中记录的困难:
实验困难
这次实验报告中记录困难时记录的较水,但是还是有一定的提示作用,这里一定程度上翻阅了原来的实验指导书、实验代码和报告内容进行了整合。

本次实验和上次一样,分为三个任务:
实验任务
这里三个实验特色都较为鲜明,个人认为启发性很强。

首先看第一个项目。
这里和实验一类似使用了MIT的题目。不得不说MIT的实验质量确实高,在保证了一定程度的训练的同时最大程度地贴近基础知识,对后序的实验都有很好地启发意义。
任务目标大致是根据所给接口的spec,构造出相应的实现类,完成ADT结构并利用该ADT结构完成一定的功能——“诗意的行走”。

首先,问题的难度在于理解面向接口的编程与ADT这一概念。在理解了这些概念之后,实际的代码书写将会事半功倍。虽然在课程中可以学到相应的知识,但是实际上操作的时候还是与理论有着一定的差距。

在面向接口进行编程之前,先要大概知道ADT是什么东西。在这次实验中,面向接口编程实际上是这部分内容中ADT的具体实现模式而已。ADT,通称Abstract Data Type,抽象数据类型。实际上,在实验一中使用的list,map接口等,就是java包中自带的ADT。原理上来讲,ADT只关注针对某项任务或者功能时该结构是否能完成相应的任务或者功能,而对其各种其他的信息没有硬性要求。简单来讲,也就是说作为一个ADT的使用者,我只需要知道该ADT为我提供的功能就可以了,而我不需要知道这个ADT内部具体怎么实现的这项功能。
就比如,我购买了冰箱,我知道了冰箱可以用来冷藏冷冻食物,但是我并不需要关心冰箱的压缩机怎么工作;而且制造冰箱或者卖给我冰箱的人,他实际上也并不想让我知道冰箱的压缩机怎么工作,因为这些一定程度上也属于他们的机密。这种关系,建立在两者——使用者和制造者对这一利用关系的共同认识。但是作为制造者,实际上要考虑更多,因为你要担心是否有人对你的产品进行恶意的毁坏。制造者需要对其内部进行必要的封装和尽可能地隐藏——对于一个冰箱,我可能需要一个压缩机,一个循环机,外加一个密闭容器就可以完成冰箱的功能,但是我还是要把各种内部构件包裹起来,进行一定程度的修饰,让它变成一个整体提供给你;于是你在拿到该冰箱的时候,你并不会看见压缩机、循环机之类的东西,你所能接触到的只有——打开冰箱门,看到冰箱的储藏仓。这里压缩机等内部构件就是ADT的内部实现细节,你最后拿到冰箱,面对的储藏仓就是该ADT所提供给你的功能接口。这部分操作叫做数据封装。一个良好的ADT,在实现的过程中,这部分一定要做到有条不紊,不然一旦有某个模块暴露在外面,就有可能造成隐性的安全问题。例如,你把压缩机暴露在 外面,假设我去敲一锤子,或者我在上面多撤几根线,很有可能就会影响到冰箱的正常使用。
对于一个ADT,我在下层可能不只有一种实现结构——冰箱,有卧式冰箱,有立式冰箱,有台式冰箱等,这是对冰箱这一概念的具体化,也就是接口和具体实现类的关系。接口不能实例化,需要依托继承关系实例化其具体实现类来完成接口的相应功能。我去商场买冰箱,肯定不能只告诉导购员我要一台冰箱,最后我肯定要具体到哪个种类的冰箱;立式冰箱可能是用储藏架结构,台式冰箱可能是堆叠物品;但是到最后我只关心作为冰箱其共性的部分,即制冷,只要这些冰箱都能完成制冷那么我认为他们就是一样的。这就是说,对于任何一个ADT,其具体实现类在完成其结构的时候,在接口层面的功能应该保持一致性,不应该存在差异。

回到Lab2的项目一,在第一部分完成ADT的过程中,针对所给接口的spec,进行了两种具体实现类的构建和方法的override,两种具体实现类分别使用边图和点图的形式完成所需功能的实现,并且在两个具体实现类中还有相应的下层类(边或点)来实现其更为基础的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值