20182330 2019-2020-1 《数据结构与面向对象程序设计》实验三报告

20182330 2019-2020-1 《数据结构与面向对象程序设计》实验三报告

课程:《程序设计与数据结构》
班级: 1823
姓名: 魏冰妍
学号:20182330
实验教师:王志强
实验日期:2019年9月23日
必修/选修: 必修

1.实验内容

下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。

  1. 初步掌握单元测试和TDD

  2. 理解并掌握面向对象三要素:封装、继承、多态(自己去学!)

  3. 初步掌握UML建模

  4. 完成蓝墨云上 (1)-(5)实验。

2. 实验过程及结果

实验一

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST

http://www.cnblogs.com/rocedu/p/6736847.html

提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。
1779573-20190928161014678-2121106145.png

实验二

参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
参考(http://www.cnblogs.com/rocedu/p/6736847.html
以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

1779573-20190928161023807-1726778041.png

实验三

实验三 Java面向对象程序设计(http://www.cnblogs.com/rocedu/p/4472842.html)

参考 http://www.cnblogs.com/rocedu/p/6736847.html

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号(30)%6进行取余运算,根据结果进行代码扩充。我的题目是:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确。
完全没有看懂题目。准备待定

实验四

任务:以TDD的方式开发一个复数类Complex,要求如下:
// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
1779573-20190928161044286-1491820296.png
1779573-20190928161104092-1366403722.png

实验五

使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考 http://www.cnblogs.com/rocedu/p/6736847.html

类图中只少两个类。
1779573-20190928161114787-1979087364.png

3. 实验过程中遇到的问题和解决过程

  • 问题1:根据教程无法安装JUnit,没有plugin选项,找不到JUnit。
    1779573-20190928161142102-823569275.png
    1779573-20190928161147416-1953695771.png

  • 问题1解决方案:找了半天发现直接在创建test的页面选择安装JUnit即可。
    1779573-20190928161159093-349310569.png

  • 问题2:什么是OCP原则和DIP原则
  • 问题2解决方案:
    面向对象五大原则有SRP、OCP、LSP、DIP、ISP
  1. SRP(Single Responsibility Princple单一职责原则)一个设计元素只做一件事。之前一直在讨论这件事。
  2. OCP(Open Close Princple开闭原则)“Closed for Modification; Open for Extension”——对变更关闭;对扩展开放
  3. LSP(Liskov Substitution Principle 里氏替换原则)Liskov是这个原则的提出者。理解起来就像大于5的数一定大于2,子能存在的地方父一定可以。
  4. DIP(Dependence Inversion Principle 依赖倒置原则)关于这个的描述我只看懂了一句,要依赖于抽象,不要依赖于具体。
  5. ISP(Interface Segregation Principle 接口分隔原则)一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此一个接口应当简单的代表一个角色,接口隔离原则讲的就是同一个角色提供宽、窄不同的接口,以对付不同的客户端。

    面向对象设计的五大原则之间并不是相互孤立的。彼此间存在着一定关联,一个可以是另一个原则的加强或是基础。违反其中的某一个,可能同时违反了其余的原则。因此应该把这些原则融会贯通,牢记在心!

  • 问题3:完全看不懂题目
    1779573-20190928162022933-892905385.png

  • 问题3解决方法:我再学习学习。。
  • 问题4
    不太会容量问题,博客中的运行结果与我的不同?
    1779573-20190928161221702-1430100909.png

  • 问题4解决方案:通过反复查找,跟同学讨论,最终恍然大悟。
  • StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。
    StringBuffer.append的用途是将字符串追加进原先的字符序列,容量是先拓展好的,所以它将遵循capacity的扩容方法继续扩容。
  • capacity扩容方法:
  1. 小于当前容量时,容量不变。
  2. 大于当前容量,并且小于(当前容量+1)2,则容量变为(当前容量+1)2。
  3. 大于当前容量,并且大于(当前容量+1)*2,则容量变为用户所设置的容量。

本代码中长度明显为12,当小于16时容量为16。博客中不知道为什么长度为17,研究了好久觉得不对,但是长度大于16所以容量为(当前容量+1)*2=34,这一点可以确定。
这样的话加分题也就迎刃而解了。
1779573-20190928161747228-1319956081.png

1779573-20190928161737731-1369384241.png

  • 问题5
    测试出错
    1779573-20190928161546138-1026900905.png
    1779573-20190928161559513-1591375043.png

  • 问题5解决方法:解决了问题4,问题5就是小case了。因为长度设置的有问题所以lenth测试报错。而长度48大于默认容量16,也大于(默认容量+1)*2。所以应该是用户设定的容量64.
  • 问题6indexOf返回的是什么意思?
  • 问题6解决方法:简明说就是指定返回字符串中的第几个字符,若指定有误(大于或小于总长)则返回-1.这个文档对于学习真的很有帮助
    1779573-20190928161525193-1679112781.png

其他(感悟、思考等)

  1. 自己摸索解决问题的过程很艰辛,但解决之后的收获也很大,希望能够继续保持。
  2. 本次实验做的很波折,问题很多,基础知识储备还是不够,需要自己多下功夫。

参考资料

转载于:https://www.cnblogs.com/weiii/p/11603550.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值