20182330 2019-2020-1 《数据结构与面向对象程序设计》实验三报告
课程:《程序设计与数据结构》
班级: 1823
姓名: 魏冰妍
学号:20182330
实验教师:王志强
实验日期:2019年9月23日
必修/选修: 必修
1.实验内容
下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。
初步掌握单元测试和TDD
理解并掌握面向对象三要素:封装、继承、多态(自己去学!)
初步掌握UML建模
完成蓝墨云上 (1)-(5)实验。
2. 实验过程及结果
实验一
参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
http://www.cnblogs.com/rocedu/p/6736847.html
提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。
实验二
参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
参考(http://www.cnblogs.com/rocedu/p/6736847.html)
以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。
实验三
实验三 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;
实验五
使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考 http://www.cnblogs.com/rocedu/p/6736847.html
类图中只少两个类。
3. 实验过程中遇到的问题和解决过程
问题1:根据教程无法安装JUnit,没有plugin选项,找不到JUnit。
问题1解决方案:找了半天发现直接在创建test的页面选择安装JUnit即可。
- 问题2:什么是OCP原则和DIP原则
- 问题2解决方案:
面向对象五大原则有SRP、OCP、LSP、DIP、ISP
- SRP(Single Responsibility Princple单一职责原则)一个设计元素只做一件事。之前一直在讨论这件事。
- OCP(Open Close Princple开闭原则)“Closed for Modification; Open for Extension”——对变更关闭;对扩展开放
- LSP(Liskov Substitution Principle 里氏替换原则)Liskov是这个原则的提出者。理解起来就像大于5的数一定大于2,子能存在的地方父一定可以。
- DIP(Dependence Inversion Principle 依赖倒置原则)关于这个的描述我只看懂了一句,要依赖于抽象,不要依赖于具体。
ISP(Interface Segregation Principle 接口分隔原则)一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此一个接口应当简单的代表一个角色,接口隔离原则讲的就是同一个角色提供宽、窄不同的接口,以对付不同的客户端。
面向对象设计的五大原则之间并不是相互孤立的。彼此间存在着一定关联,一个可以是另一个原则的加强或是基础。违反其中的某一个,可能同时违反了其余的原则。因此应该把这些原则融会贯通,牢记在心!
问题3:完全看不懂题目
- 问题3解决方法:我再学习学习。。
问题4
不太会容量问题,博客中的运行结果与我的不同?- 问题4解决方案:通过反复查找,跟同学讨论,最终恍然大悟。
- StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。
StringBuffer.append的用途是将字符串追加进原先的字符序列,容量是先拓展好的,所以它将遵循capacity的扩容方法继续扩容。 - capacity扩容方法:
- 小于当前容量时,容量不变。
- 大于当前容量,并且小于(当前容量+1)2,则容量变为(当前容量+1)2。
- 大于当前容量,并且大于(当前容量+1)*2,则容量变为用户所设置的容量。
本代码中长度明显为12,当小于16时容量为16。博客中不知道为什么长度为17,研究了好久觉得不对,但是长度大于16所以容量为(当前容量+1)*2=34,这一点可以确定。
这样的话加分题也就迎刃而解了。
问题5
测试出错- 问题5解决方法:解决了问题4,问题5就是小case了。因为长度设置的有问题所以lenth测试报错。而长度48大于默认容量16,也大于(默认容量+1)*2。所以应该是用户设定的容量64.
- 问题6indexOf返回的是什么意思?
问题6解决方法:简明说就是指定返回字符串中的第几个字符,若指定有误(大于或小于总长)则返回-1.这个文档对于学习真的很有帮助
其他(感悟、思考等)
- 自己摸索解决问题的过程很艰辛,但解决之后的收获也很大,希望能够继续保持。
- 本次实验做的很波折,问题很多,基础知识储备还是不够,需要自己多下功夫。
参考资料
- 面向对象五大原则
[StringBuffer中的capacity的扩增机制](https://blog.csdn.net/xcy1193068639/article/details/792100012