JAVA-LEARNING 第二阶段小结

0.前言
主要说明本次博客针对的作业情况(4,5,6次作业总结)

题目:

1.作业过程总结
①总结三次作业之间的知识迭代关系;

第四次作业可以说给我带来很大的打击,类的各种调用正则表达式的使用还有设计方案的不解导致这道题目并没有做出来,后来听了老师的讲解,自己重新实践了一下也算搞懂了一些.

第五次作业进一步深入理解面向对象类设计、继承与多态的应用;进一步熟练掌握Java中常用类的用法,例如ArrayList、LinkedList、StringBuilder、StringBuffer等;进一步掌握正则表达式的应用.这次作业给我最大的感觉就是数据类型的转换及其频繁,StingBuffer .LInklist等等,给我学习过程中耗费了很大的精力.

第六次作业继续练习了继承、多态的应用;ArrayList泛型的应用方法;Comparable接口及泛型的应用;单一职责原则的应用;“开-闭”原则的应用.通过老师的Main函数以及UML图设计体会到了面向对象的简洁性和条理性,使得自己的代码更容易修改.

第二阶段进入了继承,接口,多态等Java的学习,另外对封装,单一职责原则,链表List<>的使用以及正则表达式匹配进行了系统性的训练.仍然是通过老师所提供了UML图的思路进行编程,但难度突然增加了许多,

②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性;

作业中图形的继承,多态以及卡片是对于入门面向对象来说最容易理解的几个例子.通过建立抽象图形Shape,用实际的各种图形继承父类shape,并通过继承父类的方法以及进行改写方法进而达到多态的效果.

封装性指的是属性私有化,根据需要提供setter和getter方法来访问属性。即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别

增强了安全性和简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员。

③作业过程中遇到的问题及解决方法

正则表达式不会用,看网站学习比较混乱.之后老师系统的讲了就还好一些

各种数据类型的转换,某些类型的方法又大不相同.自己去搜慢慢磨出来吧,也没什么捷径熟能生巧.
④每次作业花费的时间比例

这几次作业花费时间都很长,最少的也花了半天的时间完成,甚至个别题目花了时间也没有解决.
⑤对编程过程的严谨性的认识及教训

在写第六次作业卡片的第二题时,由于是对第一题的改写,所以进行了代码的复制.起初没有发现直接复制过来会保留对原来包内类的调用.导致后来在写

Circle circle=new Circle(r);//实例化一个圆
Card card1=new Card(circle);//再进一步实例化card
cardList.add(card1);//再将card装到一个链表中

总是出现问题,一开始以为是抽象类不能实例化这方面去想,比对许多博客例子仍是没有发现问题.犯这个错误我认为就是对编程不够严谨的问题,刚开始发现了个别问题没有放在心上导致后面的实例化无法进行,容易将自己代入其他误区不易发现问题.以后发现问题要及时修改,不可多个问题同时扎堆解决,容易思维混乱.


2.OO设计心得
①对面向对象三大技术特性之间关系的理解

封装主要负责安全,继承主要负责代码复用,多态主要负责灵活性.然后共性是都使得代码更活跃一样而不是固定死的代码.这三种特性使得Java面向对象编程既贴合实际又效率高于实际..
②面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)

*单一职责原则(Single Responsibility Principle)

定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责,应该仅有一个引起它变化的原因.

  • 类的复杂性降低:每个类或接口都只实现单一的职责,定义明确清晰

我认为单一职责原则极大的撇清了一些乱七八糟的关系.现实中有很多都是由简单变复杂最终再趋向简单的设计.也是一种规律.而单一职责正是让各个位置只处理自己分内的事情,层次清晰,对于后来代码的维护和修改都有将极大的优势.

*开闭原则(Open Close Principle)

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

也就是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现变化,开闭原则更大程度上增加了代码的灵活性,提高后续维护的效率.

此原则更多运用的是通过以下三种方法实现

第一通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法;

第二,参数类型、引用对象尽量使用接口或者抽象类,而不是实现类;

第三,抽象层尽量保持稳定,一旦确定即不允许修改。


③OO编程思维的理解

正如其他同学所理解的,面向对象的编程思维并不是我们应该往这方面去靠,而是Java的编程本应该就是这样,在日常的练习当中就该如此去编程.否则它与其他语言的思想又有什么不同呢?

当然这种思想不是一朝一夕就可以实现的更多的是平时的思考和积累.
④类设计心得

类的设计过程中要有长远思想,不能局限于当前问题而忽略后续可能增加的问题.

此外类的设计要讲究分类的条理性,符合面向对象的一些设计原则,达到更高的灵活性.
3.测试的理解与实践
①测试对于编码质量的重要性

测试一方面是测试是否能完美的解决问题,另一方面测试的是能否更高效率的解决问题.

比如在求素数的题目当中就是提高运行速度的测试,之后面对的问题基数较大的时候如何提高运行速度也是一种难题不可回避.
②查阅资料,假设使用Junit进行程序的测试是否可行

每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。JUnit通过运行一组测试来自动测试实现是否正确.

编写大型程序的重要观点是将问题分解成最小的、正交的单元,这些单元可以组装成更大的模块,形成最终的程序。这种方法的一个好处是,可以对每个单元进行彻底的、独立于其他单元的测试,以便在重写代码和配置模块时快速隔离和纠正错误。单元测试是一种为最小的可测试功能片段编写测试的技术,它允许复杂的、正确的系统进行灵活的、有机的演化。


4.课程收获
总结这四周来在OO方面的教训及收获

教训收获很多啊,比如有些东西一定要通过系统性的学习再进行课外补充才行,如果单靠百度东拼西凑会把人搞得头大云里雾里,许多东西不知道怎么关联.

还有就是逻辑思维自己一定要想办法理清,可以询问别人一些细节.但是刚开始框架都搭不好就去问别人都不知道如何下手.

还有写题目时按照总分的思想搭个框架,然后自己可以在纸上画一画理清类之间的关系,处理问题时应该各个击破,分清主次

还有就是代码的优化问题,如果每次写题目和之前的思路都一样即使写出来了那么也提升不了多少,应该多想一些新的想法优化自己的编程.
5.对课程的建议
①第三阶段作业难度、题量的建议

第三阶段希望每次作业还是难易结合的方式出题,既巩固基础又有进一步的提高,同时对编程的信心不会得到毁灭性的打击.
②课程内容讲解方面的建议

通过学生角度讲课的方法很好.讲课内容可以尝试一个问题以循序渐进的方式来讲解,之前可能完全要自己去领悟而不够深入.

原文地址:https://www.cnblogs.com/XavierBorg-java-1/p/12809750.html