zoukankan      html  css  js  c++  java
  • OO课程感想(总结)

    一、前言

       本学期接近尾声,学习Java课程进入了最后阶段。不知道是上课方式的不同还是自身意识有所改变,似乎比之前学习编程会更加认真,从大一开始学习C语言,就对编程产生了恐惧,感觉自己就是不会,同样也没有去花时间写。但是在学习Java时花了很多时间,可能是之前听闻Java的“可怕”,每次写作业都会积极去询问同学,去百度或者CSDN查询出错原因,尽可能地解决问题,这是以前从来都不会有的主动。老师的授课方式也同以往不一样,边上课边敲代码,课后留一个小作业巩固知识点,学习效率有很大的提高,接下来从作业和课程两方面对本课程进行总结。

    二、作业方面

       就自己而言,学会一门编程的最快方式就是多敲多练。本学期一共写了9次PTA大作业,作业难度依次递增,写作业主要是对所学知识进行实践。第一阶段作业有计算税率、判断坐标点所在范围、电话键盘字母数字转换、判断三角形类型、统计最大数出现次数、求一元二次方程、判断闰年及星期几、求下一天、求前N天、用类解一元二次方程式、日期类设计、日期问题面向对象设计(聚合一)、日期问题面向对象设计(聚合二),这是第一次自己写Java编程,最初用的方法其实还是偏C语言,思路比较简洁,写的程序也很繁杂,不能把复杂问题简单化,整个程序很冗杂,后面通过与同学讨论,发现了自己的问题。同时初步认识了面向过程和面向对象,接触了什么是类什么是对象,也意识到了如何从面向过程过渡到面向对象;第二阶段作业有水文数据校验及处理、蒙特卡罗方法求圆周率、图形继承、图形继承与多态、一元多项式求导、图形卡片排序游戏、图形卡片分组游戏、求素数,这一阶段解除了OO的三大特性:封装性、继承性与多态性,也接触了OO基本原则的另一个“开-闭原则”,而且这阶段的作业都是NML类图,懂得看类图也是为后面的作业做铺垫。第三阶段作业有雨刷程序功能扩展设计、统计Java程序中关键词的出现次数表达式求值,这一阶段的作业可以说是前面的综合,几乎将所有知识点都集合起来,对正则表达式的运用也更加频繁。

       当然,写作业过程中会遇到许多问题,比如一开始对PTA的Java语言测试环境不熟悉,出现编译错误及多种错误,类名不是Main,不能带包名;还有对题意的不解,精度溢出问题,运行异常NullPointerException空指针等等。也正是因为遇见了这些问题,才让我学会了自己在eclipse中通过打断点debug找出问题,比如报空问题debug之后找到报空的字段并给它赋初始值;也让我学会了自己查询资料学会更多的知识,比如一元二次方程开方用法错误,查询到Java语言是用Math.sqrt()方法,一元多项式求导题目中用long类型来计算超大型数据测试时会出现数据偏差的错误,查询知道使用BigInteger来计算超大型数据不会出现此类问题,并且学到了如何使用BigInteger的乘法和减法。令我印象最为深刻的是第四次作业水文校验题目,那是第一次尝试用正则表达式,出现了很多问题,如输入连续多个空值、每一列均有误及格式不对,询问很多同学,不断使用特殊示例进行测验,包括检验方面的正则表达式的反反复复修改,当时觉得正则真的太难整了。但是正则的用处真的很多,如一元多项式求导题,运用了三个正则表达式来解决这个问题,分别代表三部分:系数、X、指数,很快的解决求导问题。通过写这些题目,不仅增强了自身的学习能力,也将所学的知识得以实践,对知识点认识更加清晰。

    三、课程方面

       1、个人认为OO编程似乎对整个程序的严谨性要求更高,在较为复杂的代码中,比较小的参数值的问题可能会造成很大的影响,导致结果完全不同;以及一些细节问题也会造成最终程序错误,比如少一个括号,使用中文字符,还有判定条件是否全面,数据精度是否会造成溢出,使用方法是否符合题意要求,第三次作业用Java语言提供的日期的方法导致结果不正确,告诫自己此后的编程要多注意这些方面的问题。在题目中的超大型数据计算时我一开始使用的是long类型,但是在超大型数据计算时超过了最大长度之后,得出的数据值会出现很大的偏差;在一元多项式的题目中我使用substring这个截取字段的方法,这个方法有个特点为“取头不取尾”需要我们多注意。

       2、每种编程都有它自己的原则,一开始了解了单一职责原则,主要是说一个方法只执行一件事情,每个对象都负责自己独自的功能,都有自己独自的属性,这与之前一股脑写完所有东西不同,整个程序看起来会很冗杂,单一职责原则会使得整个程序条理更清晰,可读性更高,程序设计也更加强壮;再后面了解了开-闭原则:当我们建了一个类之后,我们需要把类里面的属性都私有化,当外界进行访问时时无法访问的,所以我们需要写get和set方法,来给这些属性赋值和取它们的值;查询资料发现还有里氏代换原则:所有引用基类的地方必须能透明地使用其子类的对象。(在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型);接口分离原则:客户端不应该依赖那些它不需要的接口。(接口:一个类型所提供的所有方法特征的集合或狭义的特定语言的接口);合成复用原则:优先使用对象组合,而不是继承来达到复用的目的。在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用已有的对象,使成为新对象的一部分)

       3、另外,OO三大特性封装、继承、多态也是十分重要的,感觉老师似乎从第一节课就开始说这三大特性,从一开始啥也不懂到后面都有了解。我感觉从一定角度来看,封装和继承几乎都是为多态而准备的,封装:在一个对象内部,数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。像我们用private把数据被保护在内部,程序的其它部分只有通过被授权的操作getter和setter,才能对数据进行操作。继承:实现继承是指直接使用基类的属性和方法而无需额外编码的能力,接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。子类能继承父类的方法,减少代码的重复性,自己也可以在内部构造自己的方法。多态:多态就是指一个类实例的相同方法在不同情形有不同表现形式,但通过一个公共的类,那些操作可以通过相同的方式予以调用。通过指向父类的引用,在不同子类中重写的方法。

       4、课程最后老师还讲解了Javafx,这个蛮有趣的,其中的Scene.shape包含一些用来绘画的类,比如Circle,Line等,允许指定颜色来填充图形。用老师的话来说自己能做出一个界面是真的会有成就感,以前都是纯写题,没有这么直观的可以看见效果。我们学的是物联网工程专业,这可能是接触的最后一门偏软件方面的编程,虽然学的也不是很精,达到那种运用自如地效果,但也大致有了一个了解,想要深入了解当然还是要靠自觉。很幸运遇见一位这么有耐心的老师,虽然老是不给课间,但是讲课真的很好;如果说要提建议的话,就是实验方面以及课堂作业方面老师可能还需要抓抓,应该还是有部分同学有问题的,比如我,老师可以课后提供一份参考或者上课花点时间讲解。

       学习Java课程这个阶段虽然结束了,但是以后仍要继续努力学习编程,加油!

  • 相关阅读:
    AL&&PY&&PWNTOOLS&&C语言
    shellshock—CVE-2014-6271
    2019Hackergame-Shell骇客
    python&C&Assembly 常见函数(持续更新)
    Linux常见的Shell命令
    服务器常见错误代码500、501、502、503、504、505
    vscode常用快捷键总结
    如何用VSCode愉快的写Python
    Git 安装配置及基本操作
    Robot Framework用法全集
  • 原文地址:https://www.cnblogs.com/18207308-xgf/p/13057767.html
Copyright © 2011-2022 走看看